react-native-bottom-sheet-stack 1.0.3 → 1.1.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 (38) hide show
  1. package/README.md +262 -50
  2. package/lib/commonjs/BottomSheetHost.js +96 -20
  3. package/lib/commonjs/BottomSheetHost.js.map +1 -1
  4. package/lib/commonjs/BottomSheetManager.provider.js +7 -4
  5. package/lib/commonjs/BottomSheetManager.provider.js.map +1 -1
  6. package/lib/commonjs/BottomSheetPortal.js +46 -0
  7. package/lib/commonjs/BottomSheetPortal.js.map +1 -0
  8. package/lib/commonjs/bottomSheet.store.js +19 -0
  9. package/lib/commonjs/bottomSheet.store.js.map +1 -1
  10. package/lib/commonjs/index.js +14 -0
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/commonjs/portal.types.js +2 -0
  13. package/lib/commonjs/portal.types.js.map +1 -0
  14. package/lib/commonjs/useBottomSheetControl.js +81 -0
  15. package/lib/commonjs/useBottomSheetControl.js.map +1 -0
  16. package/lib/typescript/example/src/App.d.ts.map +1 -1
  17. package/lib/typescript/src/BottomSheetHost.d.ts.map +1 -1
  18. package/lib/typescript/src/BottomSheetManager.provider.d.ts.map +1 -1
  19. package/lib/typescript/src/BottomSheetPortal.d.ts +9 -0
  20. package/lib/typescript/src/BottomSheetPortal.d.ts.map +1 -0
  21. package/lib/typescript/src/bottomSheet.store.d.ts +5 -0
  22. package/lib/typescript/src/bottomSheet.store.d.ts.map +1 -1
  23. package/lib/typescript/src/index.d.ts +3 -0
  24. package/lib/typescript/src/index.d.ts.map +1 -1
  25. package/lib/typescript/src/portal.types.d.ts +24 -0
  26. package/lib/typescript/src/portal.types.d.ts.map +1 -0
  27. package/lib/typescript/src/useBottomSheetControl.d.ts +10 -0
  28. package/lib/typescript/src/useBottomSheetControl.d.ts.map +1 -0
  29. package/lib/typescript/src/useBottomSheetManager.d.ts +2 -0
  30. package/lib/typescript/src/useBottomSheetManager.d.ts.map +1 -1
  31. package/package.json +3 -1
  32. package/src/BottomSheetHost.tsx +23 -2
  33. package/src/BottomSheetManager.provider.tsx +6 -3
  34. package/src/BottomSheetPortal.tsx +39 -0
  35. package/src/bottomSheet.store.ts +27 -0
  36. package/src/index.tsx +6 -0
  37. package/src/portal.types.ts +25 -0
  38. package/src/useBottomSheetControl.ts +52 -0
@@ -70,6 +70,25 @@ const useBottomSheetStore = exports.useBottomSheetStore = (0, _traditional.creat
70
70
  stackOrder: [...state.stackOrder, sheet.id]
71
71
  };
72
72
  }),
73
+ openPortal: (id, groupId, options) => set(state => {
74
+ if (state.sheetsById[id]) {
75
+ return state;
76
+ }
77
+ return {
78
+ sheetsById: {
79
+ ...state.sheetsById,
80
+ [id]: {
81
+ id,
82
+ groupId,
83
+ content: null,
84
+ status: 'opening',
85
+ usePortal: true,
86
+ scaleBackground: options?.scaleBackground
87
+ }
88
+ },
89
+ stackOrder: [...state.stackOrder, id]
90
+ };
91
+ }),
73
92
  markOpen: id => set(state => {
74
93
  const sheet = state.sheetsById[id];
75
94
  if (!sheet) {
@@ -1 +1 @@
1
- {"version":3,"names":["_middleware","require","_traditional","useBottomSheetStore","exports","create","subscribeWithSelector","set","sheetsById","stackOrder","push","sheet","state","id","status","switch","newSheetsById","topId","length","replace","markOpen","startClosing","index","indexOf","belowId","belowSheet","undefined","finishClosing","newStackOrder","filter","sheetId","topSheet","clearAll"],"sourceRoot":"../../src","sources":["bottomSheet.store.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_middleware","require","_traditional","useBottomSheetStore","exports","create","subscribeWithSelector","set","sheetsById","stackOrder","push","sheet","state","id","status","switch","newSheetsById","topId","length","replace","openPortal","groupId","options","content","usePortal","scaleBackground","markOpen","startClosing","index","indexOf","belowId","belowSheet","undefined","finishClosing","newStackOrder","filter","sheetId","topSheet","clearAll"],"sourceRoot":"../../src","sources":["bottomSheet.store.ts"],"mappings":";;;;;;AACA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAsCO,MAAME,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAG,IAAAE,iCAAM,EACvC,IAAAC,iCAAqB,EAAoBC,GAAG,KAAM;EAChDC,UAAU,EAAE,CAAC,CAAC;EACdC,UAAU,EAAE,EAAE;EAEdC,IAAI,EAAGC,KAAK,IACVJ,GAAG,CAAEK,KAAK,IAAK;IACb,IAAIA,KAAK,CAACJ,UAAU,CAACG,KAAK,CAACE,EAAE,CAAC,EAAE;MAC9B,OAAOD,KAAK;IACd;IACA,OAAO;MACLJ,UAAU,EAAE;QACV,GAAGI,KAAK,CAACJ,UAAU;QACnB,CAACG,KAAK,CAACE,EAAE,GAAG;UAAE,GAAGF,KAAK;UAAEG,MAAM,EAAE;QAAU;MAC5C,CAAC;MACDL,UAAU,EAAE,CAAC,GAAGG,KAAK,CAACH,UAAU,EAAEE,KAAK,CAACE,EAAE;IAC5C,CAAC;EACH,CAAC,CAAC;EAEJE,MAAM,EAAGJ,KAAK,IACZJ,GAAG,CAAEK,KAAK,IAAK;IACb,IAAIA,KAAK,CAACJ,UAAU,CAACG,KAAK,CAACE,EAAE,CAAC,EAAE;MAC9B,OAAOD,KAAK;IACd;IAEA,MAAMI,aAAa,GAAG;MAAE,GAAGJ,KAAK,CAACJ;IAAW,CAAC;IAC7C,MAAMS,KAAK,GAAGL,KAAK,CAACH,UAAU,CAACG,KAAK,CAACH,UAAU,CAACS,MAAM,GAAG,CAAC,CAAC;IAE3D,IAAID,KAAK,IAAID,aAAa,CAACC,KAAK,CAAC,EAAE;MACjCD,aAAa,CAACC,KAAK,CAAC,GAAG;QACrB,GAAGD,aAAa,CAACC,KAAK,CAAC;QACvBH,MAAM,EAAE;MACV,CAAC;IACH;IAEAE,aAAa,CAACL,KAAK,CAACE,EAAE,CAAC,GAAG;MAAE,GAAGF,KAAK;MAAEG,MAAM,EAAE;IAAU,CAAC;IAEzD,OAAO;MACLN,UAAU,EAAEQ,aAAa;MACzBP,UAAU,EAAE,CAAC,GAAGG,KAAK,CAACH,UAAU,EAAEE,KAAK,CAACE,EAAE;IAC5C,CAAC;EACH,CAAC,CAAC;EAEJM,OAAO,EAAGR,KAAK,IACbJ,GAAG,CAAEK,KAAK,IAAK;IACb,IAAIA,KAAK,CAACJ,UAAU,CAACG,KAAK,CAACE,EAAE,CAAC,EAAE;MAC9B,OAAOD,KAAK;IACd;IAEA,MAAMI,aAAa,GAAG;MAAE,GAAGJ,KAAK,CAACJ;IAAW,CAAC;IAC7C,MAAMS,KAAK,GAAGL,KAAK,CAACH,UAAU,CAACG,KAAK,CAACH,UAAU,CAACS,MAAM,GAAG,CAAC,CAAC;IAE3D,IAAID,KAAK,IAAID,aAAa,CAACC,KAAK,CAAC,EAAE;MACjCD,aAAa,CAACC,KAAK,CAAC,GAAG;QACrB,GAAGD,aAAa,CAACC,KAAK,CAAC;QACvBH,MAAM,EAAE;MACV,CAAC;IACH;IAEAE,aAAa,CAACL,KAAK,CAACE,EAAE,CAAC,GAAG;MAAE,GAAGF,KAAK;MAAEG,MAAM,EAAE;IAAU,CAAC;IAEzD,OAAO;MACLN,UAAU,EAAEQ,aAAa;MACzBP,UAAU,EAAE,CAAC,GAAGG,KAAK,CAACH,UAAU,EAAEE,KAAK,CAACE,EAAE;IAC5C,CAAC;EACH,CAAC,CAAC;EAEJO,UAAU,EAAEA,CAACP,EAAE,EAAEQ,OAAO,EAAEC,OAAO,KAC/Bf,GAAG,CAAEK,KAAK,IAAK;IACb,IAAIA,KAAK,CAACJ,UAAU,CAACK,EAAE,CAAC,EAAE;MACxB,OAAOD,KAAK;IACd;IACA,OAAO;MACLJ,UAAU,EAAE;QACV,GAAGI,KAAK,CAACJ,UAAU;QACnB,CAACK,EAAE,GAAG;UACJA,EAAE;UACFQ,OAAO;UACPE,OAAO,EAAE,IAAI;UACbT,MAAM,EAAE,SAAS;UACjBU,SAAS,EAAE,IAAI;UACfC,eAAe,EAAEH,OAAO,EAAEG;QAC5B;MACF,CAAC;MACDhB,UAAU,EAAE,CAAC,GAAGG,KAAK,CAACH,UAAU,EAAEI,EAAE;IACtC,CAAC;EACH,CAAC,CAAC;EAEJa,QAAQ,EAAGb,EAAE,IACXN,GAAG,CAAEK,KAAK,IAAK;IACb,MAAMD,KAAK,GAAGC,KAAK,CAACJ,UAAU,CAACK,EAAE,CAAC;IAClC,IAAI,CAACF,KAAK,EAAE;MACV,OAAOC,KAAK;IACd;IACA,OAAO;MACLJ,UAAU,EAAE;QACV,GAAGI,KAAK,CAACJ,UAAU;QACnB,CAACK,EAAE,GAAG;UAAE,GAAGF,KAAK;UAAEG,MAAM,EAAE;QAAO;MACnC;IACF,CAAC;EACH,CAAC,CAAC;EAEJa,YAAY,EAAGd,EAAE,IACfN,GAAG,CAAEK,KAAK,IAAK;IACb,MAAMD,KAAK,GAAGC,KAAK,CAACJ,UAAU,CAACK,EAAE,CAAC;IAClC,IAAI,CAACF,KAAK,IAAIA,KAAK,CAACG,MAAM,KAAK,QAAQ,EAAE;MACvC,OAAOF,KAAK;IACd;IAEA,MAAMI,aAAa,GAAG;MAAE,GAAGJ,KAAK,CAACJ;IAAW,CAAC;IAC7CQ,aAAa,CAACH,EAAE,CAAC,GAAG;MAAE,GAAGF,KAAK;MAAEG,MAAM,EAAE;IAAU,CAAC;IAEnD,MAAMc,KAAK,GAAGhB,KAAK,CAACH,UAAU,CAACoB,OAAO,CAAChB,EAAE,CAAC;IAC1C,MAAMiB,OAAO,GAAGlB,KAAK,CAACH,UAAU,CAACmB,KAAK,GAAG,CAAC,CAAC;IAC3C,MAAMG,UAAU,GAAGD,OAAO,GAAGd,aAAa,CAACc,OAAO,CAAC,GAAGE,SAAS;IAE/D,IAAIF,OAAO,IAAIC,UAAU,IAAIA,UAAU,CAACjB,MAAM,KAAK,QAAQ,EAAE;MAC3DE,aAAa,CAACc,OAAO,CAAC,GAAG;QAAE,GAAGC,UAAU;QAAEjB,MAAM,EAAE;MAAU,CAAC;IAC/D;IAEA,OAAO;MAAEN,UAAU,EAAEQ;IAAc,CAAC;EACtC,CAAC,CAAC;EAEJiB,aAAa,EAAGpB,EAAE,IAChBN,GAAG,CAAEK,KAAK,IAAK;IACb,IAAI,CAACA,KAAK,CAACJ,UAAU,CAACK,EAAE,CAAC,EAAE;MACzB,OAAOD,KAAK;IACd;IAEA,MAAMI,aAAa,GAAG;MAAE,GAAGJ,KAAK,CAACJ;IAAW,CAAC;IAC7C,OAAOQ,aAAa,CAACH,EAAE,CAAC;IAExB,MAAMqB,aAAa,GAAGtB,KAAK,CAACH,UAAU,CAAC0B,MAAM,CAC1CC,OAAO,IAAKA,OAAO,KAAKvB,EAC3B,CAAC;IAED,MAAMI,KAAK,GAAGiB,aAAa,CAACA,aAAa,CAAChB,MAAM,GAAG,CAAC,CAAC;IACrD,MAAMmB,QAAQ,GAAGpB,KAAK,GAAGD,aAAa,CAACC,KAAK,CAAC,GAAGe,SAAS;IAEzD,IAAIf,KAAK,IAAIoB,QAAQ,IAAIA,QAAQ,CAACvB,MAAM,KAAK,QAAQ,EAAE;MACrDE,aAAa,CAACC,KAAK,CAAC,GAAG;QAAE,GAAGoB,QAAQ;QAAEvB,MAAM,EAAE;MAAU,CAAC;IAC3D;IAEA,OAAO;MACLN,UAAU,EAAEQ,aAAa;MACzBP,UAAU,EAAEyB;IACd,CAAC;EACH,CAAC,CAAC;EAEJI,QAAQ,EAAEA,CAAA,KAAM/B,GAAG,CAAC,OAAO;IAAEC,UAAU,EAAE,CAAC,CAAC;IAAEC,UAAU,EAAE;EAAG,CAAC,CAAC;AAChE,CAAC,CAAC,CACJ,CAAC","ignoreList":[]}
@@ -21,12 +21,24 @@ Object.defineProperty(exports, "BottomSheetManagerProvider", {
21
21
  return _BottomSheetManager.BottomSheetManagerProvider;
22
22
  }
23
23
  });
24
+ Object.defineProperty(exports, "BottomSheetPortal", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _BottomSheetPortal.BottomSheetPortal;
28
+ }
29
+ });
24
30
  Object.defineProperty(exports, "BottomSheetScaleView", {
25
31
  enumerable: true,
26
32
  get: function () {
27
33
  return _BottomSheetScaleView.BottomSheetScaleView;
28
34
  }
29
35
  });
36
+ Object.defineProperty(exports, "useBottomSheetControl", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _useBottomSheetControl.useBottomSheetControl;
40
+ }
41
+ });
30
42
  Object.defineProperty(exports, "useBottomSheetManager", {
31
43
  enumerable: true,
32
44
  get: function () {
@@ -45,4 +57,6 @@ var _useBottomSheetManager = require("./useBottomSheetManager");
45
57
  var _useBottomSheetState = require("./useBottomSheetState");
46
58
  var _BottomSheetManaged = require("./BottomSheetManaged");
47
59
  var _BottomSheetScaleView = require("./BottomSheetScaleView");
60
+ var _BottomSheetPortal = require("./BottomSheetPortal");
61
+ var _useBottomSheetControl = require("./useBottomSheetControl");
48
62
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_BottomSheetHost","require","_BottomSheetManager","_useBottomSheetManager","_useBottomSheetState","_BottomSheetManaged","_BottomSheetScaleView"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAH,OAAA;AACA,IAAAI,mBAAA,GAAAJ,OAAA;AACA,IAAAK,qBAAA,GAAAL,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["_BottomSheetHost","require","_BottomSheetManager","_useBottomSheetManager","_useBottomSheetState","_BottomSheetManaged","_BottomSheetScaleView","_BottomSheetPortal","_useBottomSheetControl"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAH,OAAA;AACA,IAAAI,mBAAA,GAAAJ,OAAA;AACA,IAAAK,qBAAA,GAAAL,OAAA;AAEA,IAAAM,kBAAA,GAAAN,OAAA;AACA,IAAAO,sBAAA,GAAAP,OAAA","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=portal.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["portal.types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useBottomSheetControl = useBottomSheetControl;
7
+ var _compilerRuntime = require("react/compiler-runtime");
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _bottomSheet = require("./bottomSheet.store");
10
+ var _BottomSheetManager = require("./BottomSheetManager.provider");
11
+ var _refsMap = require("./refsMap");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ function useBottomSheetControl(id) {
14
+ const $ = (0, _compilerRuntime.c)(14);
15
+ const bottomSheetManagerContext = (0, _BottomSheetManager.useMaybeBottomSheetManagerContext)();
16
+ const openPortal = (0, _bottomSheet.useBottomSheetStore)(_temp);
17
+ const startClosing = (0, _bottomSheet.useBottomSheetStore)(_temp2);
18
+ let t0;
19
+ if ($[0] !== id) {
20
+ t0 = state_1 => state_1.sheetsById[id];
21
+ $[0] = id;
22
+ $[1] = t0;
23
+ } else {
24
+ t0 = $[1];
25
+ }
26
+ const sheetState = (0, _bottomSheet.useBottomSheetStore)(t0);
27
+ let t1;
28
+ if ($[2] !== bottomSheetManagerContext?.groupId || $[3] !== id || $[4] !== openPortal) {
29
+ t1 = options => {
30
+ const groupId = bottomSheetManagerContext?.groupId || "default";
31
+ const ref = /*#__PURE__*/_react.default.createRef();
32
+ _refsMap.sheetRefs[id] = ref;
33
+ openPortal(id, groupId, options);
34
+ };
35
+ $[2] = bottomSheetManagerContext?.groupId;
36
+ $[3] = id;
37
+ $[4] = openPortal;
38
+ $[5] = t1;
39
+ } else {
40
+ t1 = $[5];
41
+ }
42
+ const open = t1;
43
+ let t2;
44
+ if ($[6] !== id || $[7] !== startClosing) {
45
+ t2 = () => {
46
+ startClosing(id);
47
+ };
48
+ $[6] = id;
49
+ $[7] = startClosing;
50
+ $[8] = t2;
51
+ } else {
52
+ t2 = $[8];
53
+ }
54
+ const close = t2;
55
+ const status = sheetState?.status ?? null;
56
+ const isOpen = status === "open" || status === "opening";
57
+ let t3;
58
+ if ($[9] !== close || $[10] !== isOpen || $[11] !== open || $[12] !== status) {
59
+ t3 = {
60
+ open,
61
+ close,
62
+ isOpen,
63
+ status
64
+ };
65
+ $[9] = close;
66
+ $[10] = isOpen;
67
+ $[11] = open;
68
+ $[12] = status;
69
+ $[13] = t3;
70
+ } else {
71
+ t3 = $[13];
72
+ }
73
+ return t3;
74
+ }
75
+ function _temp2(state_0) {
76
+ return state_0.startClosing;
77
+ }
78
+ function _temp(state) {
79
+ return state.openPortal;
80
+ }
81
+ //# sourceMappingURL=useBottomSheetControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_bottomSheet","_BottomSheetManager","_refsMap","e","__esModule","default","useBottomSheetControl","id","$","_compilerRuntime","c","bottomSheetManagerContext","useMaybeBottomSheetManagerContext","openPortal","useBottomSheetStore","_temp","startClosing","_temp2","t0","state_1","state","sheetsById","sheetState","t1","groupId","options","ref","React","createRef","sheetRefs","open","t2","close","status","isOpen","t3","state_0"],"sourceRoot":"../../src","sources":["useBottomSheetControl.ts"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,YAAA,GAAAD,OAAA;AAKA,IAAAE,mBAAA,GAAAF,OAAA;AAEA,IAAAG,QAAA,GAAAH,OAAA;AAAsC,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAS/B,SAAAG,sBAAAC,EAAA;EAAA,MAAAC,CAAA,OAAAC,gBAAA,CAAAC,CAAA;EAGL,MAAAC,yBAAA,GAAkC,IAAAC,qDAAiC,EAAC,CAAC;EAErE,MAAAC,UAAA,GAAmB,IAAAC,gCAAmB,EAACC,KAA2B,CAAC;EACnE,MAAAC,YAAA,GAAqB,IAAAF,gCAAmB,EAACG,MAA6B,CAAC;EAAC,IAAAC,EAAA;EAAA,IAAAV,CAAA,QAAAD,EAAA;IACjCW,EAAA,GAAAC,OAAA,IAAWC,OAAK,CAAAC,UAAW,CAACd,EAAE,CAAC;IAAAC,CAAA,MAAAD,EAAA;IAAAC,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EAAtE,MAAAc,UAAA,GAAmB,IAAAR,gCAAmB,EAACI,EAA+B,CAAC;EAAC,IAAAK,EAAA;EAAA,IAAAf,CAAA,QAAAG,yBAAA,EAAAa,OAAA,IAAAhB,CAAA,QAAAD,EAAA,IAAAC,CAAA,QAAAK,UAAA;IAE3DU,EAAA,GAAAE,OAAA;MACX,MAAAD,OAAA,GAAgBb,yBAAyB,EAAAa,OAAsB,IAA/C,SAA+C;MAG/D,MAAAE,GAAA,gBAAYC,cAAK,CAAAC,SAAU,CAAqB,CAAC;MACjDC,kBAAS,CAACtB,EAAE,IAAImB,GAAH;MAEbb,UAAU,CAACN,EAAE,EAAEiB,OAAO,EAAEC,OAAO,CAAC;IAAA,CACjC;IAAAjB,CAAA,MAAAG,yBAAA,EAAAa,OAAA;IAAAhB,CAAA,MAAAD,EAAA;IAAAC,CAAA,MAAAK,UAAA;IAAAL,CAAA,MAAAe,EAAA;EAAA;IAAAA,EAAA,GAAAf,CAAA;EAAA;EARD,MAAAsB,IAAA,GAAaP,EAQZ;EAAC,IAAAQ,EAAA;EAAA,IAAAvB,CAAA,QAAAD,EAAA,IAAAC,CAAA,QAAAQ,YAAA;IAEYe,EAAA,GAAAA,CAAA;MACZf,YAAY,CAACT,EAAE,CAAC;IAAA,CACjB;IAAAC,CAAA,MAAAD,EAAA;IAAAC,CAAA,MAAAQ,YAAA;IAAAR,CAAA,MAAAuB,EAAA;EAAA;IAAAA,EAAA,GAAAvB,CAAA;EAAA;EAFD,MAAAwB,KAAA,GAAcD,EAEb;EAED,MAAAE,MAAA,GAAeX,UAAU,EAAAW,MAAgB,IAA1B,IAA0B;EACzC,MAAAC,MAAA,GAAeD,MAAM,KAAK,MAA8B,IAApBA,MAAM,KAAK,SAAS;EAAC,IAAAE,EAAA;EAAA,IAAA3B,CAAA,QAAAwB,KAAA,IAAAxB,CAAA,SAAA0B,MAAA,IAAA1B,CAAA,SAAAsB,IAAA,IAAAtB,CAAA,SAAAyB,MAAA;IAElDE,EAAA;MAAAL,IAAA;MAAAE,KAAA;MAAAE,MAAA;MAAAD;IAKP,CAAC;IAAAzB,CAAA,MAAAwB,KAAA;IAAAxB,CAAA,OAAA0B,MAAA;IAAA1B,CAAA,OAAAsB,IAAA;IAAAtB,CAAA,OAAAyB,MAAA;IAAAzB,CAAA,OAAA2B,EAAA;EAAA;IAAAA,EAAA,GAAA3B,CAAA;EAAA;EAAA,OALM2B,EAKN;AAAA;AA/BI,SAAAlB,OAAAmB,OAAA;EAAA,OAM+ChB,OAAK,CAAAJ,YAAa;AAAA;AANjE,SAAAD,MAAAK,KAAA;EAAA,OAK6CA,KAAK,CAAAP,UAAW;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../../example/src/App.tsx"],"names":[],"mappings":"AAwBA,MAAM,CAAC,OAAO,UAAU,GAAG,4CAgB1B"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../../example/src/App.tsx"],"names":[],"mappings":"AA+CA,MAAM,CAAC,OAAO,UAAU,GAAG,4CAuB1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheetHost.d.ts","sourceRoot":"","sources":["../../../src/BottomSheetHost.tsx"],"names":[],"mappings":"AAkBA,iBAAS,mBAAmB,4CA+B3B;AA4DD,eAAO,MAAM,eAAe,4BAAsB,CAAC"}
1
+ {"version":3,"file":"BottomSheetHost.d.ts","sourceRoot":"","sources":["../../../src/BottomSheetHost.tsx"],"names":[],"mappings":"AAmCA,iBAAS,mBAAmB,4CA+B3B;AAgED,eAAO,MAAM,eAAe,4BAAsB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheetManager.provider.d.ts","sourceRoot":"","sources":["../../../src/BottomSheetManager.provider.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,UAAU,aAAc,SAAQ,iBAAiB;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,wBAAgB,0BAA0B,CAAC,EACzC,EAAE,EACF,WAAW,EACX,QAAQ,GACT,EAAE,aAAa,2CAQf;AAED,eAAO,MAAM,4BAA4B,QACnC,8BASH,CAAC;AAEJ,eAAO,MAAM,iCAAiC,QACxC,8BAA8B,GAAG,IAOpC,CAAC"}
1
+ {"version":3,"file":"BottomSheetManager.provider.d.ts","sourceRoot":"","sources":["../../../src/BottomSheetManager.provider.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,UAAU,aAAc,SAAQ,iBAAiB;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,wBAAgB,0BAA0B,CAAC,EACzC,EAAE,EACF,WAAW,EACX,QAAQ,GACT,EAAE,aAAa,2CAUf;AAED,eAAO,MAAM,4BAA4B,QACnC,8BASH,CAAC;AAEJ,eAAO,MAAM,iCAAiC,QACxC,8BAA8B,GAAG,IAOpC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { BottomSheetPortalId } from './portal.types';
3
+ interface BottomSheetPortalProps {
4
+ id: BottomSheetPortalId;
5
+ children: React.ReactElement;
6
+ }
7
+ export declare function BottomSheetPortal({ id, children }: BottomSheetPortalProps): import("react/jsx-runtime").JSX.Element | null;
8
+ export {};
9
+ //# sourceMappingURL=BottomSheetPortal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomSheetPortal.d.ts","sourceRoot":"","sources":["../../../src/BottomSheetPortal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,UAAU,sBAAsB;IAC9B,EAAE,EAAE,mBAAmB,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;CAC9B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,sBAAsB,kDAuBzE"}
@@ -7,16 +7,21 @@ export interface BottomSheetState {
7
7
  content: ReactNode;
8
8
  status: BottomSheetStatus;
9
9
  scaleBackground?: boolean;
10
+ usePortal?: boolean;
10
11
  }
11
12
  type TriggerState = Omit<BottomSheetState, 'status'>;
12
13
  interface BottomSheetStoreState {
13
14
  sheetsById: Record<string, BottomSheetState>;
14
15
  stackOrder: string[];
15
16
  }
17
+ export interface PortalOpenOptions {
18
+ scaleBackground?: boolean;
19
+ }
16
20
  interface BottomSheetStoreActions {
17
21
  push(sheet: TriggerState): void;
18
22
  switch(sheet: TriggerState): void;
19
23
  replace(sheet: TriggerState): void;
24
+ openPortal(id: string, groupId: string, options?: PortalOpenOptions): void;
20
25
  markOpen(id: string): void;
21
26
  startClosing(id: string): void;
22
27
  finishClosing(id: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"bottomSheet.store.d.ts","sourceRoot":"","sources":["../../../src/bottomSheet.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC1E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,KAAK,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAErD,UAAU,qBAAqB;IAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,UAAU,uBAAuB;IAC/B,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,GAAG,uBAAuB,CAAC;AAE/E,eAAO,MAAM,mBAAmB;;;;;;;;EAkI/B,CAAC"}
1
+ {"version":3,"file":"bottomSheet.store.d.ts","sourceRoot":"","sources":["../../../src/bottomSheet.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC1E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,KAAK,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAErD,UAAU,qBAAqB;IAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,uBAAuB;IAC/B,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC3E,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,GAAG,uBAAuB,CAAC;AAE/E,eAAO,MAAM,mBAAmB;;;;;;;;EAuJ/B,CAAC"}
@@ -5,4 +5,7 @@ export { useBottomSheetState } from './useBottomSheetState';
5
5
  export { BottomSheetManaged } from './BottomSheetManaged';
6
6
  export { BottomSheetScaleView } from './BottomSheetScaleView';
7
7
  export { type ScaleConfig } from './useScaleAnimation';
8
+ export { BottomSheetPortal } from './BottomSheetPortal';
9
+ export { useBottomSheetControl } from './useBottomSheetControl';
10
+ export type { BottomSheetPortalRegistry, BottomSheetPortalId, } from './portal.types';
8
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EACV,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Registry for portal-based bottom sheets.
3
+ * Augment this interface in your app to get type-safe sheet IDs:
4
+ *
5
+ * @example
6
+ * ```tsx
7
+ * declare module 'react-native-bottom-sheet-stack' {
8
+ * interface BottomSheetPortalRegistry {
9
+ * 'my-sheet': true;
10
+ * 'settings-sheet': true;
11
+ * 'profile-sheet': true;
12
+ * }
13
+ * }
14
+ * ```
15
+ */
16
+ export interface BottomSheetPortalRegistry {
17
+ }
18
+ /**
19
+ * Type-safe portal sheet ID.
20
+ * If BottomSheetPortalRegistry is augmented, this will be a union of the registered keys.
21
+ * Otherwise, it falls back to `string` for flexibility.
22
+ */
23
+ export type BottomSheetPortalId = keyof BottomSheetPortalRegistry extends never ? string : Extract<keyof BottomSheetPortalRegistry, string>;
24
+ //# sourceMappingURL=portal.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.types.d.ts","sourceRoot":"","sources":["../../../src/portal.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,yBAAyB;CAAG;AAE7C;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,yBAAyB,SAAS,KAAK,GAC3E,MAAM,GACN,OAAO,CAAC,MAAM,yBAAyB,EAAE,MAAM,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type BottomSheetStatus, type PortalOpenOptions } from './bottomSheet.store';
2
+ import type { BottomSheetPortalId } from './portal.types';
3
+ export interface UseBottomSheetControlReturn {
4
+ open: (options?: PortalOpenOptions) => void;
5
+ close: () => void;
6
+ isOpen: boolean;
7
+ status: BottomSheetStatus | null;
8
+ }
9
+ export declare function useBottomSheetControl(id: BottomSheetPortalId): UseBottomSheetControlReturn;
10
+ //# sourceMappingURL=useBottomSheetControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBottomSheetControl.d.ts","sourceRoot":"","sources":["../../../src/useBottomSheetControl.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAClC;AAED,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,mBAAmB,GACtB,2BAA2B,CA8B7B"}
@@ -14,12 +14,14 @@ export declare const useBottomSheetManager: () => {
14
14
  id: string;
15
15
  content: React.ReactNode;
16
16
  scaleBackground?: boolean | undefined;
17
+ usePortal?: boolean | undefined;
17
18
  }) => void;
18
19
  replaceBottomSheet: (sheet: {
19
20
  groupId: string;
20
21
  id: string;
21
22
  content: React.ReactNode;
22
23
  scaleBackground?: boolean | undefined;
24
+ usePortal?: boolean | undefined;
23
25
  }) => void;
24
26
  };
25
27
  //# sourceMappingURL=useBottomSheetManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBottomSheetManager.d.ts","sourceRoot":"","sources":["../../../src/useBottomSheetManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAMzE,eAAO,MAAM,qBAAqB;;gBA0Db,MAAM;+BArCd,KAAK,CAAC,YAAY,YAClB;QACP,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,QAAQ,CAAC;QAChB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B;;;;;;;;;;;;;CA8CJ,CAAC"}
1
+ {"version":3,"file":"useBottomSheetManager.d.ts","sourceRoot":"","sources":["../../../src/useBottomSheetManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAMzE,eAAO,MAAM,qBAAqB;;gBA0Db,MAAM;+BArCd,KAAK,CAAC,YAAY,YAClB;QACP,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,QAAQ,CAAC;QAChB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B;;;;;;;;;;;;;;;CA8CJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-bottom-sheet-stack",
3
- "version": "1.0.3",
3
+ "version": "1.1.0",
4
4
  "description": "Bottom Sheet Stack Manager",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "lib/commonjs/index.js",
@@ -63,6 +63,7 @@
63
63
  "react-native-gesture-handler": "^2.30.0",
64
64
  "react-native-reanimated": "^4.2.1",
65
65
  "react-native-safe-area-context": "^5.6.2",
66
+ "react-native-teleport": "^0.5.6",
66
67
  "react-native-worklets": "^0.7.1",
67
68
  "release-it": "^17.10.0",
68
69
  "typescript": "^5.2.2",
@@ -75,6 +76,7 @@
75
76
  "react-native-gesture-handler": ">=2.0.0",
76
77
  "react-native-reanimated": ">=3.0.0",
77
78
  "react-native-safe-area-context": ">=5.0.0",
79
+ "react-native-teleport": ">=0.5.0",
78
80
  "zustand": ">=5.0.0"
79
81
  },
80
82
  "workspaces": [
@@ -2,6 +2,7 @@ import { useEffect } from 'react';
2
2
  import { StyleSheet, View } from 'react-native';
3
3
  import Animated from 'react-native-reanimated';
4
4
  import { useSafeAreaFrame } from 'react-native-safe-area-context';
5
+ import { PortalHost } from 'react-native-teleport';
5
6
 
6
7
  import { shallow } from 'zustand/shallow';
7
8
  import { cleanupAnimatedIndex } from './animatedRegistry';
@@ -16,6 +17,22 @@ import {
16
17
  type ScaleConfig,
17
18
  } from './useScaleAnimation';
18
19
 
20
+ function PortalHostWrapper({
21
+ id,
22
+ width,
23
+ height,
24
+ }: {
25
+ id: string;
26
+ width: number;
27
+ height: number;
28
+ }) {
29
+ return (
30
+ <View style={{ flex: 1, width, height }}>
31
+ <PortalHost name={`bottomsheet-${id}`} style={{ width, height }} />
32
+ </View>
33
+ );
34
+ }
35
+
19
36
  function BottomSheetHostComp() {
20
37
  const queueIds = useQueueIds();
21
38
  const clearAll = useBottomSheetStore((store) => store.clearAll);
@@ -58,7 +75,7 @@ function QueueItem({
58
75
  groupId: string;
59
76
  scaleConfig?: ScaleConfig;
60
77
  }) {
61
- const content = useBottomSheetStore((state) => state.sheetsById[id]?.content);
78
+ const sheet = useBottomSheetStore((state) => state.sheetsById[id]);
62
79
 
63
80
  const { width, height } = useSafeAreaFrame();
64
81
  const value = { id };
@@ -89,7 +106,11 @@ function QueueItem({
89
106
  scaleStyle,
90
107
  ]}
91
108
  >
92
- {content}
109
+ {sheet?.usePortal ? (
110
+ <PortalHostWrapper id={id} width={width} height={height} />
111
+ ) : (
112
+ sheet?.content
113
+ )}
93
114
  </Animated.View>
94
115
  </BottomSheetContext.Provider>
95
116
  );
@@ -1,4 +1,5 @@
1
1
  import React, { type PropsWithChildren } from 'react';
2
+ import { PortalProvider } from 'react-native-teleport';
2
3
 
3
4
  import {
4
5
  BottomSheetManagerContext,
@@ -19,9 +20,11 @@ export function BottomSheetManagerProvider({
19
20
  const value = { groupId: id, scaleConfig };
20
21
 
21
22
  return (
22
- <BottomSheetManagerContext.Provider key={id} value={value}>
23
- {children}
24
- </BottomSheetManagerContext.Provider>
23
+ <PortalProvider>
24
+ <BottomSheetManagerContext.Provider key={id} value={value}>
25
+ {children}
26
+ </BottomSheetManagerContext.Provider>
27
+ </PortalProvider>
25
28
  );
26
29
  }
27
30
 
@@ -0,0 +1,39 @@
1
+ 'use no memo';
2
+
3
+ import React from 'react';
4
+ import { Portal } from 'react-native-teleport';
5
+
6
+ import { BottomSheetContext } from './BottomSheet.context';
7
+ import { useBottomSheetStore } from './bottomSheet.store';
8
+ import type { BottomSheetPortalId } from './portal.types';
9
+ import { sheetRefs } from './refsMap';
10
+
11
+ interface BottomSheetPortalProps {
12
+ id: BottomSheetPortalId;
13
+ children: React.ReactElement;
14
+ }
15
+
16
+ export function BottomSheetPortal({ id, children }: BottomSheetPortalProps) {
17
+ const sheetState = useBottomSheetStore((state) => state.sheetsById[id]);
18
+
19
+ // Only render when the sheet is active and using portal
20
+ if (!sheetState?.usePortal) {
21
+ return null;
22
+ }
23
+
24
+ // Get the ref that was created in useBottomSheetControl.open()
25
+ const ref = sheetRefs[id];
26
+
27
+ // Clone the child element to add the ref
28
+ // @ts-ignore - same pattern as useBottomSheetManager
29
+ const childWithRef = React.cloneElement(children, { ref });
30
+
31
+ // Wrap with BottomSheetContext so useBottomSheetState() works inside portal content
32
+ return (
33
+ <Portal hostName={`bottomsheet-${id}`}>
34
+ <BottomSheetContext.Provider value={{ id }}>
35
+ {childWithRef}
36
+ </BottomSheetContext.Provider>
37
+ </Portal>
38
+ );
39
+ }
@@ -11,6 +11,7 @@ export interface BottomSheetState {
11
11
  content: ReactNode;
12
12
  status: BottomSheetStatus;
13
13
  scaleBackground?: boolean;
14
+ usePortal?: boolean;
14
15
  }
15
16
 
16
17
  type TriggerState = Omit<BottomSheetState, 'status'>;
@@ -20,10 +21,15 @@ interface BottomSheetStoreState {
20
21
  stackOrder: string[];
21
22
  }
22
23
 
24
+ export interface PortalOpenOptions {
25
+ scaleBackground?: boolean;
26
+ }
27
+
23
28
  interface BottomSheetStoreActions {
24
29
  push(sheet: TriggerState): void;
25
30
  switch(sheet: TriggerState): void;
26
31
  replace(sheet: TriggerState): void;
32
+ openPortal(id: string, groupId: string, options?: PortalOpenOptions): void;
27
33
  markOpen(id: string): void;
28
34
  startClosing(id: string): void;
29
35
  finishClosing(id: string): void;
@@ -99,6 +105,27 @@ export const useBottomSheetStore = create(
99
105
  };
100
106
  }),
101
107
 
108
+ openPortal: (id, groupId, options) =>
109
+ set((state) => {
110
+ if (state.sheetsById[id]) {
111
+ return state;
112
+ }
113
+ return {
114
+ sheetsById: {
115
+ ...state.sheetsById,
116
+ [id]: {
117
+ id,
118
+ groupId,
119
+ content: null,
120
+ status: 'opening',
121
+ usePortal: true,
122
+ scaleBackground: options?.scaleBackground,
123
+ },
124
+ },
125
+ stackOrder: [...state.stackOrder, id],
126
+ };
127
+ }),
128
+
102
129
  markOpen: (id) =>
103
130
  set((state) => {
104
131
  const sheet = state.sheetsById[id];
package/src/index.tsx CHANGED
@@ -5,3 +5,9 @@ export { useBottomSheetState } from './useBottomSheetState';
5
5
  export { BottomSheetManaged } from './BottomSheetManaged';
6
6
  export { BottomSheetScaleView } from './BottomSheetScaleView';
7
7
  export { type ScaleConfig } from './useScaleAnimation';
8
+ export { BottomSheetPortal } from './BottomSheetPortal';
9
+ export { useBottomSheetControl } from './useBottomSheetControl';
10
+ export type {
11
+ BottomSheetPortalRegistry,
12
+ BottomSheetPortalId,
13
+ } from './portal.types';
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Registry for portal-based bottom sheets.
3
+ * Augment this interface in your app to get type-safe sheet IDs:
4
+ *
5
+ * @example
6
+ * ```tsx
7
+ * declare module 'react-native-bottom-sheet-stack' {
8
+ * interface BottomSheetPortalRegistry {
9
+ * 'my-sheet': true;
10
+ * 'settings-sheet': true;
11
+ * 'profile-sheet': true;
12
+ * }
13
+ * }
14
+ * ```
15
+ */
16
+ export interface BottomSheetPortalRegistry {}
17
+
18
+ /**
19
+ * Type-safe portal sheet ID.
20
+ * If BottomSheetPortalRegistry is augmented, this will be a union of the registered keys.
21
+ * Otherwise, it falls back to `string` for flexibility.
22
+ */
23
+ export type BottomSheetPortalId = keyof BottomSheetPortalRegistry extends never
24
+ ? string
25
+ : Extract<keyof BottomSheetPortalRegistry, string>;
@@ -0,0 +1,52 @@
1
+ import React from 'react';
2
+ import type { BottomSheetMethods } from '@gorhom/bottom-sheet/lib/typescript/types';
3
+
4
+ import {
5
+ useBottomSheetStore,
6
+ type BottomSheetStatus,
7
+ type PortalOpenOptions,
8
+ } from './bottomSheet.store';
9
+ import { useMaybeBottomSheetManagerContext } from './BottomSheetManager.provider';
10
+ import type { BottomSheetPortalId } from './portal.types';
11
+ import { sheetRefs } from './refsMap';
12
+
13
+ export interface UseBottomSheetControlReturn {
14
+ open: (options?: PortalOpenOptions) => void;
15
+ close: () => void;
16
+ isOpen: boolean;
17
+ status: BottomSheetStatus | null;
18
+ }
19
+
20
+ export function useBottomSheetControl(
21
+ id: BottomSheetPortalId
22
+ ): UseBottomSheetControlReturn {
23
+ const bottomSheetManagerContext = useMaybeBottomSheetManagerContext();
24
+
25
+ const openPortal = useBottomSheetStore((state) => state.openPortal);
26
+ const startClosing = useBottomSheetStore((state) => state.startClosing);
27
+ const sheetState = useBottomSheetStore((state) => state.sheetsById[id]);
28
+
29
+ const open = (options?: PortalOpenOptions) => {
30
+ const groupId = bottomSheetManagerContext?.groupId || 'default';
31
+
32
+ // Create ref when opening (same pattern as useBottomSheetManager)
33
+ const ref = React.createRef<BottomSheetMethods>();
34
+ sheetRefs[id] = ref;
35
+
36
+ openPortal(id, groupId, options);
37
+ };
38
+
39
+ const close = () => {
40
+ startClosing(id);
41
+ };
42
+
43
+ const status = sheetState?.status ?? null;
44
+ const isOpen = status === 'open' || status === 'opening';
45
+
46
+ return {
47
+ open,
48
+ close,
49
+ isOpen,
50
+ status,
51
+ };
52
+ }