import {Children, createContext, useContext, useMemo} from 'react' import {View} from 'react-native' import {Popover} from 'radix-ui' import {atoms as a, flatten, select, useTheme} from '#/alf' import {transparentifyColor} from '#/alf/util/colorGeneration' import { ARROW_SIZE, BUBBLE_MAX_WIDTH, MIN_EDGE_SPACE, } from '#/components/Tooltip/const' import {Text} from '#/components/Typography' type TooltipContextType = { position: 'top' | 'bottom' onVisibleChange: (open: boolean) => void } const TooltipContext = createContext({ position: 'bottom', onVisibleChange: () => {}, }) TooltipContext.displayName = 'TooltipContext' export function Outer({ children, position = 'bottom', visible, onVisibleChange, }: { children: React.ReactNode position?: 'top' | 'bottom' visible: boolean onVisibleChange: (visible: boolean) => void }) { const ctx = useMemo( () => ({position, onVisibleChange}), [position, onVisibleChange], ) return ( {children} ) } export function Target({children}: {children: React.ReactNode}) { return ( {children} ) } export function Content({ children, label, }: { children: React.ReactNode label: string }) { const t = useTheme() const {position, onVisibleChange} = useContext(TooltipContext) return ( onVisibleChange(false)} style={flatten([ a.rounded_sm, select(t.name, { light: t.atoms.bg, dark: t.atoms.bg_contrast_100, dim: t.atoms.bg_contrast_100, }), { minWidth: 'max-content', boxShadow: select(t.name, { light: `0 0 24px ${transparentifyColor(t.palette.black, 0.2)}`, dark: `0 0 24px ${transparentifyColor(t.palette.black, 0.2)}`, dim: `0 0 24px ${transparentifyColor(t.palette.black, 0.2)}`, }), }, ])}> {children} ) } export function TextBubble({children}: {children: React.ReactNode}) { const c = Children.toArray(children) return ( {c.map((child, i) => ( {child} ))} ) }