forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import React from 'react'
2
3import {createPortalGroup_INTERNAL} from './lib/Portal'
4
5type PortalContext = React.ElementType<{children: React.ReactNode}>
6
7export const Context = React.createContext({} as PortalContext)
8Context.displayName = 'BottomSheetPortalContext'
9
10export const useBottomSheetPortal_INTERNAL = () => React.useContext(Context)
11
12export function BottomSheetPortalProvider({
13 children,
14}: {
15 children: React.ReactNode
16}) {
17 const portal = React.useMemo(() => {
18 return createPortalGroup_INTERNAL()
19 }, [])
20
21 return (
22 <Context.Provider value={portal.Portal}>
23 <portal.Provider>
24 {children}
25 <portal.Outlet />
26 </portal.Provider>
27 </Context.Provider>
28 )
29}
30
31const defaultPortal = createPortalGroup_INTERNAL()
32
33export const BottomSheetOutlet = defaultPortal.Outlet
34
35export function BottomSheetProvider({children}: {children: React.ReactNode}) {
36 return (
37 <Context.Provider value={defaultPortal.Portal}>
38 <defaultPortal.Provider>{children}</defaultPortal.Provider>
39 </Context.Provider>
40 )
41}