@tamagui/popover 1.0.1-beta.21 → 1.0.1-beta.211

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Popover.tsx"],
4
- "sourcesContent": ["// adapted from radix-ui popover\n\nimport '@tamagui/polyfill-dev'\n\nimport {\n useDelayGroup,\n useDismiss,\n useFloating,\n useFocus,\n useHover,\n useInteractions,\n useRole,\n} from '@floating-ui/react-dom-interactions'\nimport { AnimatePresence } from '@tamagui/animate-presence'\nimport { useComposedRefs } from '@tamagui/compose-refs'\nimport { composeEventHandlers, useId, withStaticProperties } from '@tamagui/core'\nimport type { Scope } from '@tamagui/create-context'\nimport { createContextScope } from '@tamagui/create-context'\n// import { DismissableLayer } from '@tamagui/react-dismissable-layer'\n// import { useFocusGuards } from '@tamagui/react-focus-guards'\n// import { FocusScope } from '@tamagui/react-focus-scope'\nimport {\n FloatingOverrideContext,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n PopperContentProps,\n PopperProps,\n UseFloatingFn,\n createPopperScope,\n} from '@tamagui/popper'\nimport { Portal } from '@tamagui/portal'\nimport { YStack, YStackProps } from '@tamagui/stacks'\nimport { useControllableState } from '@tamagui/use-controllable-state'\n// import { hideOthers } from 'aria-hidden'\nimport * as React from 'react'\nimport { GestureResponderEvent, View } from 'react-native'\n\n// import { RemoveScroll } from 'react-remove-scroll'\n\nconst POPOVER_NAME = 'Popover'\n\ntype ScopedProps<P> = P & { __scopePopover?: Scope }\nconst [createPopoverContext, createPopoverScopeInternal] = createContextScope(POPOVER_NAME, [\n createPopperScope,\n])\nexport const usePopoverScope = createPopperScope()\nexport const createPopoverScope = createPopoverScopeInternal\n\ntype PopoverContextValue = {\n triggerRef: React.RefObject<HTMLButtonElement>\n contentId?: string\n open: boolean\n onOpenChange(open: boolean): void\n onOpenToggle(): void\n hasCustomAnchor: boolean\n onCustomAnchorAdd(): void\n onCustomAnchorRemove(): void\n modal: boolean\n}\n\nconst [PopoverProviderInternal, usePopoverInternalContext] =\n createPopoverContext<PopoverContextValue>(POPOVER_NAME)\n\nexport const __PopoverProviderInternal = PopoverProviderInternal\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'PopoverAnchor'\n\ntype PopoverAnchorElement = HTMLElement | View\nexport type PopoverAnchorProps = YStackProps\n\nexport const PopoverAnchor = React.forwardRef<PopoverAnchorElement, PopoverAnchorProps>(\n (props: ScopedProps<PopoverAnchorProps>, forwardedRef) => {\n const { __scopePopover, ...anchorProps } = props\n const context = usePopoverInternalContext(ANCHOR_NAME, __scopePopover)\n const popperScope = usePopoverScope(__scopePopover)\n const { onCustomAnchorAdd, onCustomAnchorRemove } = context\n\n React.useEffect(() => {\n onCustomAnchorAdd()\n return () => onCustomAnchorRemove()\n }, [onCustomAnchorAdd, onCustomAnchorRemove])\n\n return <PopperAnchor {...popperScope} {...anchorProps} ref={forwardedRef} />\n }\n)\n\nPopoverAnchor.displayName = ANCHOR_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'PopoverTrigger'\n\ntype PopoverTriggerElement = HTMLElement | View\nexport type PopoverTriggerProps = YStackProps\n\nexport const PopoverTrigger = React.forwardRef<PopoverTriggerElement, PopoverTriggerProps>(\n (props: ScopedProps<PopoverTriggerProps>, forwardedRef) => {\n const { __scopePopover, ...triggerProps } = props\n const context = usePopoverInternalContext(TRIGGER_NAME, __scopePopover)\n const popperScope = usePopoverScope(__scopePopover)\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef)\n\n const trigger = (\n <YStack\n aria-haspopup=\"dialog\"\n aria-expanded={context.open}\n aria-controls={context.contentId}\n data-state={getState(context.open)}\n {...triggerProps}\n ref={composedTriggerRef}\n onPress={composeEventHandlers(props.onPress, context.onOpenToggle)}\n />\n )\n\n return context.hasCustomAnchor ? (\n trigger\n ) : (\n <PopperAnchor asChild {...popperScope}>\n {trigger}\n </PopperAnchor>\n )\n }\n)\n\nPopoverTrigger.displayName = TRIGGER_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'PopoverContent'\n\nexport interface PopoverContentTypeProps\n extends Omit<PopoverContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {\n /**\n * @see https://github.com/theKashey/react-remove-scroll#usage\n */\n allowPinchZoom?: RemoveScrollProps['allowPinchZoom']\n}\n\nexport type PopoverContentProps = PopoverContentTypeProps\n\nexport const PopoverContent = React.forwardRef<PopoverContentTypeElement, PopoverContentProps>(\n (props: ScopedProps<PopoverContentProps>, forwardedRef) => {\n const context = usePopoverInternalContext(CONTENT_NAME, props.__scopePopover)\n return context.modal ? (\n <PopoverContentModal {...props} ref={forwardedRef} />\n ) : (\n <PopoverContentNonModal {...props} ref={forwardedRef} />\n )\n }\n)\n\nPopoverContent.displayName = CONTENT_NAME\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype RemoveScrollProps = any //React.ComponentProps<typeof RemoveScroll>\ntype PopoverContentTypeElement = PopoverContentImplElement\n\nconst PopoverContentModal = React.forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(\n (props: ScopedProps<PopoverContentTypeProps>, forwardedRef) => {\n const { allowPinchZoom, ...contentModalProps } = props\n const context = usePopoverInternalContext(CONTENT_NAME, props.__scopePopover)\n const contentRef = React.useRef<HTMLDivElement>(null)\n const composedRefs = useComposedRefs(forwardedRef, contentRef)\n const isRightClickOutsideRef = React.useRef(false)\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n // React.useEffect(() => {\n // const content = contentRef.current\n // if (content) return hideOthers(content)\n // }, [])\n\n const PortalWrapper = context.modal ? Portal : React.Fragment\n\n return (\n <PortalWrapper>\n {/* <RemoveScroll allowPinchZoom={allowPinchZoom}> */}\n <PopoverContentImpl\n {...contentModalProps}\n ref={composedRefs}\n // we make sure we're not trapping once it's been closed\n // (closed !== unmounted when animating out)\n trapFocus={context.open}\n disableOutsidePointerEvents\n onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault()\n if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus()\n })}\n onPointerDownOutside={composeEventHandlers(\n props.onPointerDownOutside,\n (event) => {\n console.log('pinter outside', event)\n // @ts-expect-error\n const originalEvent = event.detail.originalEvent\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick\n isRightClickOutsideRef.current = isRightClick\n },\n { checkDefaultPrevented: false }\n )}\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkDefaultPrevented: false }\n )}\n />\n {/* </RemoveScroll> */}\n </PortalWrapper>\n )\n }\n)\n\nconst PopoverContentNonModal = React.forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(\n (props: ScopedProps<PopoverContentTypeProps>, forwardedRef) => {\n const { ...contentNonModalProps } = props\n const context = usePopoverInternalContext(CONTENT_NAME, props.__scopePopover)\n const hasInteractedOutsideRef = React.useRef(false)\n const PortalWrapper = context.modal ? Portal : React.Fragment\n\n return (\n <PortalWrapper>\n <PopoverContentImpl\n {...contentNonModalProps}\n ref={forwardedRef}\n trapFocus={false}\n disableOutsidePointerEvents={false}\n onCloseAutoFocus={(event) => {\n props.onCloseAutoFocus?.(event)\n\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus()\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault()\n }\n\n hasInteractedOutsideRef.current = false\n }}\n onInteractOutside={(event) => {\n props.onInteractOutside?.(event)\n\n if (!event.defaultPrevented) hasInteractedOutsideRef.current = true\n\n // Prevent dismissing when clicking the trigger.\n // As the trigger is already setup to close, without doing so would\n // cause it to close and immediately open.\n //\n // We use `onInteractOutside` as some browsers also\n // focus on pointer down, creating the same issue.\n // @ts-ignore\n const target = event.target as HTMLElement\n const targetIsTrigger = context.triggerRef.current?.contains(target)\n if (targetIsTrigger) event.preventDefault()\n }}\n />\n </PortalWrapper>\n )\n }\n)\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PopoverContentImplElement = React.ElementRef<typeof PopperContent>\n\n// TODO\ntype FocusScopeProps = {\n /**\n * Whether focus should be trapped within the FocusScope\n * (default: false)\n */\n trapped?: boolean\n\n /**\n * Event handler called when auto-focusing on mount.\n * Can be prevented.\n */\n onMountAutoFocus?: (event: GestureResponderEvent) => void\n\n /**\n * Event handler called when auto-focusing on unmount.\n * Can be prevented.\n */\n onUnmountAutoFocus?: (event: GestureResponderEvent) => void\n}\n\ntype DismissableLayerProps = {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside the `DismissableLayer`.\n * Users will need to click twice on outside elements to interact with them:\n * Once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: boolean\n\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void\n\n /**\n * Event handler called when the a pointer event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: (event: GestureResponderEvent) => void\n // onPointerDownOutside?: (event: MouseEvent | TouchEvent) => void\n\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onFocusOutside?: (event: React.FocusEvent) => void\n\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a pointer event happens outside of the `DismissableLayer` or focus moves outside of it.\n * Can be prevented.\n */\n onInteractOutside?: (event: GestureResponderEvent) => void\n // onInteractOutside?: (event: MouseEvent | TouchEvent | React.FocusEvent) => void\n\n /** Callback called when the `DismissableLayer` should be dismissed */\n onDismiss?: () => void\n}\n\nexport interface PopoverContentImplProps\n extends PopperContentProps,\n Omit<DismissableLayerProps, 'onDismiss'> {\n /**\n * Whether focus should be trapped within the `Popover`\n * (default: false)\n */\n trapFocus?: FocusScopeProps['trapped']\n\n /**\n * Event handler called when auto-focusing on open.\n * Can be prevented.\n */\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus']\n\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus']\n}\n\nconst PopoverContentImpl = React.forwardRef<PopoverContentImplElement, PopoverContentImplProps>(\n (props: ScopedProps<PopoverContentImplProps>, forwardedRef) => {\n const {\n __scopePopover,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n ...contentProps\n } = props\n const context = usePopoverInternalContext(CONTENT_NAME, __scopePopover)\n const popperScope = usePopoverScope(__scopePopover)\n\n // Make sure the whole tree has focus guards as our `Popover` may be\n // the last element in the DOM (beacuse of the `Portal`)\n // useFocusGuards()\n\n // <FocusScope\n // asChild\n // loop\n // trapped={trapFocus}\n // onMountAutoFocus={onOpenAutoFocus}\n // onUnmountAutoFocus={onCloseAutoFocus}\n // >\n // <DismissableLayer\n // asChild\n // disableOutsidePointerEvents={disableOutsidePointerEvents}\n // onInteractOutside={onInteractOutside}\n // onEscapeKeyDown={onEscapeKeyDown}\n // onPointerDownOutside={onPointerDownOutside}\n // onFocusOutside={onFocusOutside}\n // onDismiss={() => context.onOpenChange(false)}\n // >\n return (\n <AnimatePresence>\n {!!context.open && (\n <PopperContent\n data-state={getState(context.open)}\n // role=\"dialog\"\n id={context.contentId}\n pointerEvents=\"auto\"\n {...popperScope}\n {...contentProps}\n ref={forwardedRef}\n />\n )}\n </AnimatePresence>\n )\n // </DismissableLayer>\n // </FocusScope>\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'PopoverClose'\n\ntype PopoverCloseElement = HTMLElement | View\nexport type PopoverCloseProps = YStackProps\n\nexport const PopoverClose = React.forwardRef<PopoverCloseElement, PopoverCloseProps>(\n (props: ScopedProps<PopoverCloseProps>, forwardedRef) => {\n const { __scopePopover, ...closeProps } = props\n const context = usePopoverInternalContext(CLOSE_NAME, __scopePopover)\n return (\n <YStack\n {...closeProps}\n ref={forwardedRef}\n onPress={composeEventHandlers(props.onPress, () => context.onOpenChange(false))}\n />\n )\n }\n)\n\nPopoverClose.displayName = CLOSE_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'PopoverArrow'\n\ntype PopoverArrowElement = HTMLElement | View\nexport type PopoverArrowProps = YStackProps\n\nexport const PopoverArrow = React.forwardRef<PopoverArrowElement, PopoverArrowProps>(\n (props: ScopedProps<PopoverArrowProps>, forwardedRef) => {\n const { __scopePopover, ...arrowProps } = props\n const popperScope = usePopoverScope(__scopePopover)\n return <PopperArrow {...popperScope} {...arrowProps} ref={forwardedRef} />\n }\n)\n\nPopoverArrow.displayName = ARROW_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n\nexport type PopoverProps = PopperProps & {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n modal?: boolean\n}\n\nexport const Popover = withStaticProperties(\n ((props: ScopedProps<PopoverProps>) => {\n const {\n __scopePopover,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n ...restProps\n } = props\n const popperScope = usePopoverScope(__scopePopover)\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false)\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen || false,\n onChange: onOpenChange,\n })\n\n const useFloatingFn: UseFloatingFn = (props) => {\n const floating = useFloating({\n ...props,\n open,\n onOpenChange: setOpen,\n })\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useFocus(floating.context),\n useRole(floating.context, { role: 'dialog' }),\n useDismiss(floating.context),\n ])\n return {\n ...floating,\n getReferenceProps,\n getFloatingProps,\n } as any\n }\n\n const useFloatingContext = React.useCallback(useFloatingFn, [open])\n\n return (\n <FloatingOverrideContext.Provider value={useFloatingContext}>\n <Popper {...popperScope} {...restProps}>\n <PopoverProviderInternal\n scope={__scopePopover}\n contentId={useId()}\n triggerRef={triggerRef}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n hasCustomAnchor={hasCustomAnchor}\n onCustomAnchorAdd={React.useCallback(() => setHasCustomAnchor(true), [])}\n onCustomAnchorRemove={React.useCallback(() => setHasCustomAnchor(false), [])}\n modal={modal}\n >\n {children}\n </PopoverProviderInternal>\n </Popper>\n </FloatingOverrideContext.Provider>\n )\n }) as React.FC<PopoverProps>,\n {\n Anchor: PopoverAnchor,\n Arrow: PopoverArrow,\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n Close: PopoverClose,\n }\n)\n\nPopover.displayName = POPOVER_NAME\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed'\n}\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["// adapted from radix-ui popover\n\nimport '@tamagui/polyfill-dev'\n\nimport { AnimatePresence } from '@tamagui/animate-presence'\nimport { hideOthers } from '@tamagui/aria-hidden'\nimport { useComposedRefs } from '@tamagui/compose-refs'\nimport {\n MediaQueryKey,\n SizeTokens,\n Theme,\n composeEventHandlers,\n isWeb,\n useEvent,\n useGet,\n useId,\n useMedia,\n useThemeName,\n withStaticProperties,\n} from '@tamagui/core'\nimport type { Scope } from '@tamagui/create-context'\nimport { createContextScope } from '@tamagui/create-context'\nimport { DismissableProps } from '@tamagui/dismissable'\nimport { FocusScope, FocusScopeProps } from '@tamagui/focus-scope'\nimport {\n FloatingOverrideContext,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperArrowProps,\n PopperContent,\n PopperContentProps,\n PopperProps,\n createPopperScope,\n} from '@tamagui/popper'\nimport { Portal, PortalHost, PortalItem } from '@tamagui/portal'\nimport { RemoveScroll, RemoveScrollProps } from '@tamagui/remove-scroll'\nimport { ControlledSheet, SheetController } from '@tamagui/sheet'\nimport { YStack, YStackProps } from '@tamagui/stacks'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport * as React from 'react'\nimport { ScrollView, ScrollViewProps, View } from 'react-native'\n\nimport type { UseFloatingProps } from './floating'\nimport { useDismiss, useFloating, useFocus, useInteractions, useRole } from './floating'\n\nconst POPOVER_NAME = 'Popover'\n\ntype ScopedProps<P> = P & { __scopePopover?: Scope }\ntype NonNull<A> = Exclude<A, void | null>\n\nexport type PopoverProps = PopperProps & {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n sheetBreakpoint?: MediaQueryKey | false\n}\n\ntype PopoverContextValue = {\n triggerRef: React.RefObject<HTMLButtonElement>\n contentId?: string\n open: boolean\n onOpenChange(open: boolean): void\n onOpenToggle(): void\n hasCustomAnchor: boolean\n onCustomAnchorAdd(): void\n onCustomAnchorRemove(): void\n size?: SizeTokens\n sheetBreakpoint: NonNull<PopoverProps['sheetBreakpoint']>\n scopeKey: string\n}\n\nconst [createPopoverContext, createPopoverScopeInternal] = createContextScope(POPOVER_NAME, [\n createPopperScope,\n])\nexport const usePopoverScope = createPopperScope()\nexport const createPopoverScope = createPopoverScopeInternal\n\nconst [PopoverProviderInternal, usePopoverInternalContext] =\n createPopoverContext<PopoverContextValue>(POPOVER_NAME)\n\nexport const __PopoverProviderInternal = PopoverProviderInternal\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'PopoverAnchor'\n\ntype PopoverAnchorElement = HTMLElement | View\nexport type PopoverAnchorProps = YStackProps\n\nexport const PopoverAnchor = React.forwardRef<PopoverAnchorElement, PopoverAnchorProps>(\n (props: ScopedProps<PopoverAnchorProps>, forwardedRef) => {\n const { __scopePopover, ...anchorProps } = props\n const context = usePopoverInternalContext(ANCHOR_NAME, __scopePopover)\n const popperScope = usePopoverScope(__scopePopover)\n const { onCustomAnchorAdd, onCustomAnchorRemove } = context\n\n React.useEffect(() => {\n onCustomAnchorAdd()\n return () => onCustomAnchorRemove()\n }, [onCustomAnchorAdd, onCustomAnchorRemove])\n\n return <PopperAnchor {...popperScope} {...anchorProps} ref={forwardedRef} />\n }\n)\n\nPopoverAnchor.displayName = ANCHOR_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'PopoverTrigger'\n\ntype PopoverTriggerElement = HTMLElement | View\nexport type PopoverTriggerProps = YStackProps\n\nexport const PopoverTrigger = React.forwardRef<PopoverTriggerElement, PopoverTriggerProps>(\n (props: ScopedProps<PopoverTriggerProps>, forwardedRef) => {\n const { __scopePopover, ...triggerProps } = props\n const context = usePopoverInternalContext(TRIGGER_NAME, __scopePopover)\n const popperScope = usePopoverScope(__scopePopover)\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef)\n\n const trigger = (\n <YStack\n aria-haspopup=\"dialog\"\n aria-expanded={context.open}\n // TODO not matching\n // aria-controls={context.contentId}\n data-state={getState(context.open)}\n {...triggerProps}\n ref={composedTriggerRef}\n onPress={composeEventHandlers(props.onPress, context.onOpenToggle)}\n />\n )\n\n return context.hasCustomAnchor ? (\n trigger\n ) : (\n <PopperAnchor asChild {...popperScope}>\n {trigger}\n </PopperAnchor>\n )\n }\n)\n\nPopoverTrigger.displayName = TRIGGER_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'PopoverContent'\n\nexport type PopoverContentProps = PopoverContentTypeProps\n\ntype PopoverContentTypeElement = PopoverContentImplElement\n\nexport interface PopoverContentTypeProps\n extends Omit<PopoverContentImplProps, 'disableOutsidePointerEvents'> {\n /**\n * @see https://github.com/theKashey/react-remove-scroll#usage\n */\n allowPinchZoom?: RemoveScrollProps['allowPinchZoom']\n}\n\nexport const PopoverContent = React.forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(\n (props: ScopedProps<PopoverContentTypeProps>, forwardedRef) => {\n const { allowPinchZoom, trapFocus, disableRemoveScroll = true, ...contentModalProps } = props\n const context = usePopoverInternalContext(CONTENT_NAME, props.__scopePopover)\n const contentRef = React.useRef<HTMLDivElement>(null)\n const composedRefs = useComposedRefs(forwardedRef, contentRef)\n const isRightClickOutsideRef = React.useRef(false)\n const themeName = useThemeName()\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n if (!context.open) return\n const content = contentRef.current\n if (content) return hideOthers(content)\n }, [context.open])\n\n return (\n <Portal zIndex={props.zIndex ?? 1000}>\n <Theme name={themeName}>\n <PopoverContentImpl\n {...contentModalProps}\n disableRemoveScroll={disableRemoveScroll}\n ref={composedRefs}\n // we make sure we're not trapping once it's been closed\n // (closed !== unmounted when animating out)\n trapFocus={trapFocus ?? context.open}\n disableOutsidePointerEvents\n onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault()\n if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus()\n })}\n onPointerDownOutside={composeEventHandlers(\n props.onPointerDownOutside,\n (event) => {\n const originalEvent = event.detail.originalEvent\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick\n isRightClickOutsideRef.current = isRightClick\n },\n { checkDefaultPrevented: false }\n )}\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkDefaultPrevented: false }\n )}\n />\n </Theme>\n </Portal>\n )\n }\n)\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PopoverContentImplElement = React.ElementRef<typeof PopperContent>\n\nexport interface PopoverContentImplProps\n extends PopperContentProps,\n Omit<DismissableProps, 'onDismiss' | 'children'> {\n /**\n * Whether focus should be trapped within the `Popover`\n * (default: false)\n */\n trapFocus?: FocusScopeProps['trapped']\n\n /**\n * Event handler called when auto-focusing on open.\n * Can be prevented.\n */\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus']\n\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus']\n\n disableRemoveScroll?: boolean\n}\n\nconst PopoverContentImpl = React.forwardRef<PopoverContentImplElement, PopoverContentImplProps>(\n (props: ScopedProps<PopoverContentImplProps>, forwardedRef) => {\n const {\n __scopePopover,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n children,\n disableRemoveScroll,\n ...contentProps\n } = props\n const popperScope = usePopoverScope(__scopePopover)\n const context = usePopoverInternalContext(CONTENT_NAME, popperScope.__scopePopover)\n const showSheet = useShowPopoverSheet(context)\n // const popperContext = usePopperContext(CONTENT_NAME, popperScope.__scopePopper)\n\n if (showSheet) {\n // unwrap the PopoverScrollView if used, as it will use the SheetScrollView if that exists\n const childrenWithoutScrollView = React.Children.toArray(children).map((child) => {\n if (React.isValidElement(child)) {\n if (child.type === PopoverScrollView) {\n return child.props.children\n }\n }\n return child\n })\n\n // doesn't show as popover yet on native, must use as sheet\n return (\n <PortalItem hostName={`${context.scopeKey}SheetContents`}>\n {childrenWithoutScrollView}\n </PortalItem>\n )\n }\n\n // const handleDismiss = React.useCallback(() => context.onOpenChange(false), [])\n // <Dismissable\n // disableOutsidePointerEvents={disableOutsidePointerEvents}\n // // onInteractOutside={onInteractOutside}\n // onEscapeKeyDown={onEscapeKeyDown}\n // // onPointerDownOutside={onPointerDownOutside}\n // // onFocusOutside={onFocusOutside}\n // onDismiss={handleDismiss}\n // >\n\n return (\n <AnimatePresence>\n {!!context.open && (\n <PopperContent\n key=\"popper-content\"\n data-state={getState(context.open)}\n id={context.contentId}\n pointerEvents=\"auto\"\n {...popperScope}\n {...contentProps}\n ref={forwardedRef}\n >\n <RemoveScroll\n enabled={disableRemoveScroll ? false : context.open}\n allowPinchZoom\n // causes lots of bugs on touch web on site\n removeScrollBar={false}\n style={{\n display: 'contents',\n }}\n >\n {trapFocus === false ? (\n children\n ) : (\n <FocusScope\n loop\n trapped={trapFocus ?? context.open}\n onMountAutoFocus={onOpenAutoFocus}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n <div style={{ display: 'contents' }}>{children}</div>\n </FocusScope>\n )}\n </RemoveScroll>\n </PopperContent>\n )}\n </AnimatePresence>\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'PopoverClose'\n\ntype PopoverCloseElement = HTMLElement | View\nexport type PopoverCloseProps = YStackProps\n\nexport const PopoverClose = React.forwardRef<PopoverCloseElement, PopoverCloseProps>(\n (props: ScopedProps<PopoverCloseProps>, forwardedRef) => {\n const { __scopePopover, ...closeProps } = props\n const context = usePopoverInternalContext(CLOSE_NAME, __scopePopover)\n return (\n <YStack\n {...closeProps}\n ref={forwardedRef}\n onPress={composeEventHandlers(props.onPress, () => context.onOpenChange(false))}\n />\n )\n }\n)\n\nPopoverClose.displayName = CLOSE_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'PopoverArrow'\n\ntype PopoverArrowElement = HTMLElement | View\nexport type PopoverArrowProps = PopperArrowProps\n\nexport const PopoverArrow = React.forwardRef<PopoverArrowElement, PopoverArrowProps>(\n (props: ScopedProps<PopoverArrowProps>, forwardedRef) => {\n const { __scopePopover, ...arrowProps } = props\n const popperScope = usePopoverScope(__scopePopover)\n return <PopperArrow {...popperScope} {...arrowProps} ref={forwardedRef} />\n }\n)\n\nPopoverArrow.displayName = ARROW_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverSheetContents\n * -----------------------------------------------------------------------------------------------*/\n\nconst SHEET_CONTENTS_NAME = 'PopoverSheetContents'\n\nexport const PopoverSheetContents = ({ __scopePopover }: ScopedProps<{}>) => {\n const context = usePopoverInternalContext(SHEET_CONTENTS_NAME, __scopePopover)\n return <PortalHost name={`${context.scopeKey}SheetContents`}></PortalHost>\n}\n\nPopoverSheetContents.displayName = SHEET_CONTENTS_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverScrollView\n * -----------------------------------------------------------------------------------------------*/\n\nconst PopoverScrollView = React.forwardRef<ScrollView, ScrollViewProps>((props, ref) => {\n return <ScrollView ref={ref} {...props} />\n})\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n\nexport const Popover = withStaticProperties(\n ((props: ScopedProps<PopoverProps>) => {\n const {\n __scopePopover,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n sheetBreakpoint = false,\n ...restProps\n } = props\n const popperScope = usePopoverScope(__scopePopover)\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false)\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen || false,\n onChange: onOpenChange,\n })\n\n const breakpointActive = useSheetBreakpointActive(sheetBreakpoint)\n\n const useFloatingContext = React.useCallback(\n (props: UseFloatingProps) => {\n const floating = useFloating({\n ...props,\n open,\n onOpenChange: setOpen,\n })\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useFocus(floating.context, {\n enabled: !breakpointActive,\n }),\n useRole(floating.context, { role: 'dialog' }),\n useDismiss(floating.context, {\n enabled: !breakpointActive,\n }),\n ])\n return {\n ...floating,\n getReferenceProps,\n getFloatingProps,\n }\n },\n [breakpointActive, open, setOpen]\n )\n\n return (\n <FloatingOverrideContext.Provider value={useFloatingContext as any}>\n <Popper {...popperScope} stayInFrame {...restProps}>\n <PopoverProviderInternal\n scope={__scopePopover}\n scopeKey={__scopePopover ? Object.keys(__scopePopover)[0] : ''}\n sheetBreakpoint={sheetBreakpoint}\n contentId={useId()}\n triggerRef={triggerRef}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={useEvent(() => {\n if (open && breakpointActive) {\n return\n }\n setOpen(!open)\n })}\n hasCustomAnchor={hasCustomAnchor}\n onCustomAnchorAdd={React.useCallback(() => setHasCustomAnchor(true), [])}\n onCustomAnchorRemove={React.useCallback(() => setHasCustomAnchor(false), [])}\n >\n <PopoverSheetController onOpenChange={setOpen} __scopePopover={__scopePopover}>\n {children}\n </PopoverSheetController>\n </PopoverProviderInternal>\n </Popper>\n </FloatingOverrideContext.Provider>\n )\n }) as React.FC<PopoverProps>,\n {\n Anchor: PopoverAnchor,\n Arrow: PopoverArrow,\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n Close: PopoverClose,\n SheetContents: PopoverSheetContents,\n ScrollView: PopoverScrollView,\n Sheet: ControlledSheet,\n }\n)\n\nPopover.displayName = POPOVER_NAME\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed'\n}\n\nconst PopoverSheetController = (\n props: ScopedProps<{\n children: React.ReactNode\n onOpenChange: React.Dispatch<React.SetStateAction<boolean>>\n }>\n) => {\n const context = usePopoverInternalContext('PopoverSheetController', props.__scopePopover)\n const showSheet = useShowPopoverSheet(context)\n const breakpointActive = useSheetBreakpointActive(context.sheetBreakpoint)\n const getShowSheet = useGet(showSheet)\n return (\n <SheetController\n onOpenChange={(val) => {\n if (getShowSheet()) {\n props.onOpenChange(val)\n }\n }}\n open={context.open}\n hidden={breakpointActive === false}\n >\n {props.children}\n </SheetController>\n )\n}\n\nconst useSheetBreakpointActive = (breakpoint?: MediaQueryKey | false) => {\n const media = useMedia()\n return breakpoint ? media[breakpoint] : false\n}\n\nconst useShowPopoverSheet = (context: PopoverContextValue) => {\n // for now always show as sheet on native\n if (!isWeb) return true\n const breakpointActive = useSheetBreakpointActive(context.sheetBreakpoint)\n return context.open === false ? false : breakpointActive\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["props"]
7
7
  }
@@ -0,0 +1,15 @@
1
+ import {
2
+ useDismiss,
3
+ useFloating,
4
+ useFocus,
5
+ useInteractions,
6
+ useRole
7
+ } from "@floating-ui/react-dom-interactions";
8
+ export {
9
+ useDismiss,
10
+ useFloating,
11
+ useFocus,
12
+ useInteractions,
13
+ useRole
14
+ };
15
+ //# sourceMappingURL=floating.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/floating.ts"],
4
+ "sourcesContent": ["export {\n type UseFloatingProps,\n useDismiss,\n useFloating,\n useFocus,\n useInteractions,\n useRole,\n} from '@floating-ui/react-dom-interactions'\n"],
5
+ "mappings": "AAAA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;",
6
+ "names": []
7
+ }
@@ -0,0 +1,31 @@
1
+ const useDismiss = () => {
2
+ };
3
+ const useFloating = () => {
4
+ return {
5
+ context: {},
6
+ reference: () => {
7
+ },
8
+ floating: () => {
9
+ },
10
+ refs: {
11
+ floating: {},
12
+ reference: {}
13
+ },
14
+ middlewareData: {}
15
+ };
16
+ };
17
+ const useFocus = () => {
18
+ };
19
+ const useInteractions = () => {
20
+ return {};
21
+ };
22
+ const useRole = () => {
23
+ };
24
+ export {
25
+ useDismiss,
26
+ useFloating,
27
+ useFocus,
28
+ useInteractions,
29
+ useRole
30
+ };
31
+ //# sourceMappingURL=floating.native.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/floating.native.ts"],
4
+ "sourcesContent": ["export const useDismiss = () => {}\nexport const useFloating = () => {\n return {\n context: {},\n reference: () => {},\n floating: () => {},\n refs: {\n floating: {},\n reference: {},\n },\n middlewareData: {},\n }\n}\nexport const useFocus = () => {}\nexport const useInteractions = () => {\n return {}\n}\nexport const useRole = () => {}\n"],
5
+ "mappings": "AAAO,MAAM,aAAa,MAAM;AAAC;AAC1B,MAAM,cAAc,MAAM;AAC/B,SAAO;AAAA,IACL,SAAS,CAAC;AAAA,IACV,WAAW,MAAM;AAAA,IAAC;AAAA,IAClB,UAAU,MAAM;AAAA,IAAC;AAAA,IACjB,MAAM;AAAA,MACJ,UAAU,CAAC;AAAA,MACX,WAAW,CAAC;AAAA,IACd;AAAA,IACA,gBAAgB,CAAC;AAAA,EACnB;AACF;AACO,MAAM,WAAW,MAAM;AAAC;AACxB,MAAM,kBAAkB,MAAM;AACnC,SAAO,CAAC;AACV;AACO,MAAM,UAAU,MAAM;AAAC;",
6
+ "names": []
7
+ }
package/dist/esm/index.js CHANGED
File without changes
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.tsx"],
4
4
  "sourcesContent": ["export * from './Popover'\n"],
5
- "mappings": "AAAA;",
5
+ "mappings": "AAAA,cAAc;",
6
6
  "names": []
7
7
  }
@@ -1,17 +1,20 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
1
  import "@tamagui/polyfill-dev";
4
- import {
5
- useDismiss,
6
- useFloating,
7
- useFocus,
8
- useInteractions,
9
- useRole
10
- } from "@floating-ui/react-dom-interactions";
11
2
  import { AnimatePresence } from "@tamagui/animate-presence";
3
+ import { hideOthers } from "@tamagui/aria-hidden";
12
4
  import { useComposedRefs } from "@tamagui/compose-refs";
13
- import { composeEventHandlers, useId, withStaticProperties } from "@tamagui/core";
5
+ import {
6
+ Theme,
7
+ composeEventHandlers,
8
+ isWeb,
9
+ useEvent,
10
+ useGet,
11
+ useId,
12
+ useMedia,
13
+ useThemeName,
14
+ withStaticProperties
15
+ } from "@tamagui/core";
14
16
  import { createContextScope } from "@tamagui/create-context";
17
+ import { FocusScope } from "@tamagui/focus-scope";
15
18
  import {
16
19
  FloatingOverrideContext,
17
20
  Popper,
@@ -20,10 +23,14 @@ import {
20
23
  PopperContent,
21
24
  createPopperScope
22
25
  } from "@tamagui/popper";
23
- import { Portal } from "@tamagui/portal";
26
+ import { Portal, PortalHost, PortalItem } from "@tamagui/portal";
27
+ import { RemoveScroll } from "@tamagui/remove-scroll";
28
+ import { ControlledSheet, SheetController } from "@tamagui/sheet";
24
29
  import { YStack } from "@tamagui/stacks";
25
30
  import { useControllableState } from "@tamagui/use-controllable-state";
26
31
  import * as React from "react";
32
+ import { ScrollView } from "react-native";
33
+ import { useDismiss, useFloating, useFocus, useInteractions, useRole } from "./floating";
27
34
  const POPOVER_NAME = "Popover";
28
35
  const [createPopoverContext, createPopoverScopeInternal] = createContextScope(POPOVER_NAME, [
29
36
  createPopperScope
@@ -33,167 +40,227 @@ const createPopoverScope = createPopoverScopeInternal;
33
40
  const [PopoverProviderInternal, usePopoverInternalContext] = createPopoverContext(POPOVER_NAME);
34
41
  const __PopoverProviderInternal = PopoverProviderInternal;
35
42
  const ANCHOR_NAME = "PopoverAnchor";
36
- const PopoverAnchor = React.forwardRef((props, forwardedRef) => {
37
- const { __scopePopover, ...anchorProps } = props;
38
- const context = usePopoverInternalContext(ANCHOR_NAME, __scopePopover);
39
- const popperScope = usePopoverScope(__scopePopover);
40
- const { onCustomAnchorAdd, onCustomAnchorRemove } = context;
41
- React.useEffect(() => {
42
- onCustomAnchorAdd();
43
- return () => onCustomAnchorRemove();
44
- }, [onCustomAnchorAdd, onCustomAnchorRemove]);
45
- return <PopperAnchor {...popperScope} {...anchorProps} ref={forwardedRef} />;
46
- });
43
+ const PopoverAnchor = React.forwardRef(
44
+ (props, forwardedRef) => {
45
+ const { __scopePopover, ...anchorProps } = props;
46
+ const context = usePopoverInternalContext(ANCHOR_NAME, __scopePopover);
47
+ const popperScope = usePopoverScope(__scopePopover);
48
+ const { onCustomAnchorAdd, onCustomAnchorRemove } = context;
49
+ React.useEffect(() => {
50
+ onCustomAnchorAdd();
51
+ return () => onCustomAnchorRemove();
52
+ }, [onCustomAnchorAdd, onCustomAnchorRemove]);
53
+ return <PopperAnchor {...popperScope} {...anchorProps} ref={forwardedRef} />;
54
+ }
55
+ );
47
56
  PopoverAnchor.displayName = ANCHOR_NAME;
48
57
  const TRIGGER_NAME = "PopoverTrigger";
49
- const PopoverTrigger = React.forwardRef((props, forwardedRef) => {
50
- const { __scopePopover, ...triggerProps } = props;
51
- const context = usePopoverInternalContext(TRIGGER_NAME, __scopePopover);
52
- const popperScope = usePopoverScope(__scopePopover);
53
- const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);
54
- const trigger = <YStack aria-haspopup="dialog" aria-expanded={context.open} aria-controls={context.contentId} data-state={getState(context.open)} {...triggerProps} ref={composedTriggerRef} onPress={composeEventHandlers(props.onPress, context.onOpenToggle)} />;
55
- return context.hasCustomAnchor ? trigger : <PopperAnchor asChild {...popperScope}>{trigger}</PopperAnchor>;
56
- });
58
+ const PopoverTrigger = React.forwardRef(
59
+ (props, forwardedRef) => {
60
+ const { __scopePopover, ...triggerProps } = props;
61
+ const context = usePopoverInternalContext(TRIGGER_NAME, __scopePopover);
62
+ const popperScope = usePopoverScope(__scopePopover);
63
+ const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);
64
+ const trigger = <YStack aria-haspopup="dialog" aria-expanded={context.open} data-state={getState(context.open)} {...triggerProps} ref={composedTriggerRef} onPress={composeEventHandlers(props.onPress, context.onOpenToggle)} />;
65
+ return context.hasCustomAnchor ? trigger : <PopperAnchor asChild {...popperScope}>{trigger}</PopperAnchor>;
66
+ }
67
+ );
57
68
  PopoverTrigger.displayName = TRIGGER_NAME;
58
69
  const CONTENT_NAME = "PopoverContent";
59
- const PopoverContent = React.forwardRef((props, forwardedRef) => {
60
- const context = usePopoverInternalContext(CONTENT_NAME, props.__scopePopover);
61
- return context.modal ? <PopoverContentModal {...props} ref={forwardedRef} /> : <PopoverContentNonModal {...props} ref={forwardedRef} />;
62
- });
63
- PopoverContent.displayName = CONTENT_NAME;
64
- const PopoverContentModal = React.forwardRef((props, forwardedRef) => {
65
- const { allowPinchZoom, ...contentModalProps } = props;
66
- const context = usePopoverInternalContext(CONTENT_NAME, props.__scopePopover);
67
- const contentRef = React.useRef(null);
68
- const composedRefs = useComposedRefs(forwardedRef, contentRef);
69
- const isRightClickOutsideRef = React.useRef(false);
70
- const PortalWrapper = context.modal ? Portal : React.Fragment;
71
- return <PortalWrapper><PopoverContentImpl {...contentModalProps} ref={composedRefs} trapFocus={context.open} disableOutsidePointerEvents onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {
72
- var _a;
73
- event.preventDefault();
74
- if (!isRightClickOutsideRef.current)
75
- (_a = context.triggerRef.current) == null ? void 0 : _a.focus();
76
- })} onPointerDownOutside={composeEventHandlers(props.onPointerDownOutside, (event) => {
77
- console.log("pinter outside", event);
78
- const originalEvent = event.detail.originalEvent;
79
- const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
80
- const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
81
- isRightClickOutsideRef.current = isRightClick;
82
- }, { checkDefaultPrevented: false })} onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) => event.preventDefault(), { checkDefaultPrevented: false })} /></PortalWrapper>;
83
- });
84
- const PopoverContentNonModal = React.forwardRef((props, forwardedRef) => {
85
- const { ...contentNonModalProps } = props;
86
- const context = usePopoverInternalContext(CONTENT_NAME, props.__scopePopover);
87
- const hasInteractedOutsideRef = React.useRef(false);
88
- const PortalWrapper = context.modal ? Portal : React.Fragment;
89
- return <PortalWrapper><PopoverContentImpl {...contentNonModalProps} ref={forwardedRef} trapFocus={false} disableOutsidePointerEvents={false} onCloseAutoFocus={(event) => {
90
- var _a, _b;
91
- (_a = props.onCloseAutoFocus) == null ? void 0 : _a.call(props, event);
92
- if (!event.defaultPrevented) {
93
- if (!hasInteractedOutsideRef.current)
94
- (_b = context.triggerRef.current) == null ? void 0 : _b.focus();
70
+ const PopoverContent = React.forwardRef(
71
+ (props, forwardedRef) => {
72
+ const { allowPinchZoom, trapFocus, disableRemoveScroll = true, ...contentModalProps } = props;
73
+ const context = usePopoverInternalContext(CONTENT_NAME, props.__scopePopover);
74
+ const contentRef = React.useRef(null);
75
+ const composedRefs = useComposedRefs(forwardedRef, contentRef);
76
+ const isRightClickOutsideRef = React.useRef(false);
77
+ const themeName = useThemeName();
78
+ React.useEffect(() => {
79
+ if (!context.open)
80
+ return;
81
+ const content = contentRef.current;
82
+ if (content)
83
+ return hideOthers(content);
84
+ }, [context.open]);
85
+ return <Portal zIndex={props.zIndex ?? 1e3}><Theme name={themeName}><PopoverContentImpl {...contentModalProps} disableRemoveScroll={disableRemoveScroll} ref={composedRefs} trapFocus={trapFocus ?? context.open} disableOutsidePointerEvents onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {
95
86
  event.preventDefault();
87
+ if (!isRightClickOutsideRef.current)
88
+ context.triggerRef.current?.focus();
89
+ })} onPointerDownOutside={composeEventHandlers(
90
+ props.onPointerDownOutside,
91
+ (event) => {
92
+ const originalEvent = event.detail.originalEvent;
93
+ const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
94
+ const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
95
+ isRightClickOutsideRef.current = isRightClick;
96
+ },
97
+ { checkDefaultPrevented: false }
98
+ )} onFocusOutside={composeEventHandlers(
99
+ props.onFocusOutside,
100
+ (event) => event.preventDefault(),
101
+ { checkDefaultPrevented: false }
102
+ )} /></Theme></Portal>;
103
+ }
104
+ );
105
+ const PopoverContentImpl = React.forwardRef(
106
+ (props, forwardedRef) => {
107
+ const {
108
+ __scopePopover,
109
+ trapFocus,
110
+ onOpenAutoFocus,
111
+ onCloseAutoFocus,
112
+ disableOutsidePointerEvents,
113
+ onEscapeKeyDown,
114
+ onPointerDownOutside,
115
+ onFocusOutside,
116
+ onInteractOutside,
117
+ children,
118
+ disableRemoveScroll,
119
+ ...contentProps
120
+ } = props;
121
+ const popperScope = usePopoverScope(__scopePopover);
122
+ const context = usePopoverInternalContext(CONTENT_NAME, popperScope.__scopePopover);
123
+ const showSheet = useShowPopoverSheet(context);
124
+ if (showSheet) {
125
+ const childrenWithoutScrollView = React.Children.toArray(children).map((child) => {
126
+ if (React.isValidElement(child)) {
127
+ if (child.type === PopoverScrollView) {
128
+ return child.props.children;
129
+ }
130
+ }
131
+ return child;
132
+ });
133
+ return <PortalItem hostName={`${context.scopeKey}SheetContents`}>{childrenWithoutScrollView}</PortalItem>;
96
134
  }
97
- hasInteractedOutsideRef.current = false;
98
- }} onInteractOutside={(event) => {
99
- var _a, _b;
100
- (_a = props.onInteractOutside) == null ? void 0 : _a.call(props, event);
101
- if (!event.defaultPrevented)
102
- hasInteractedOutsideRef.current = true;
103
- const target = event.target;
104
- const targetIsTrigger = (_b = context.triggerRef.current) == null ? void 0 : _b.contains(target);
105
- if (targetIsTrigger)
106
- event.preventDefault();
107
- }} /></PortalWrapper>;
108
- });
109
- const PopoverContentImpl = React.forwardRef((props, forwardedRef) => {
110
- const {
111
- __scopePopover,
112
- trapFocus,
113
- onOpenAutoFocus,
114
- onCloseAutoFocus,
115
- disableOutsidePointerEvents,
116
- onEscapeKeyDown,
117
- onPointerDownOutside,
118
- onFocusOutside,
119
- onInteractOutside,
120
- ...contentProps
121
- } = props;
122
- const context = usePopoverInternalContext(CONTENT_NAME, __scopePopover);
123
- const popperScope = usePopoverScope(__scopePopover);
124
- return <AnimatePresence>{!!context.open && <PopperContent data-state={getState(context.open)} id={context.contentId} pointerEvents="auto" {...popperScope} {...contentProps} ref={forwardedRef} />}</AnimatePresence>;
125
- });
135
+ return <AnimatePresence>{!!context.open && <PopperContent key="popper-content" data-state={getState(context.open)} id={context.contentId} pointerEvents="auto" {...popperScope} {...contentProps} ref={forwardedRef}><RemoveScroll enabled={disableRemoveScroll ? false : context.open} allowPinchZoom removeScrollBar={false} style={{
136
+ display: "contents"
137
+ }}>{trapFocus === false ? children : <FocusScope loop trapped={trapFocus ?? context.open} onMountAutoFocus={onOpenAutoFocus} onUnmountAutoFocus={onCloseAutoFocus}><div style={{ display: "contents" }}>{children}</div></FocusScope>}</RemoveScroll></PopperContent>}</AnimatePresence>;
138
+ }
139
+ );
126
140
  const CLOSE_NAME = "PopoverClose";
127
- const PopoverClose = React.forwardRef((props, forwardedRef) => {
128
- const { __scopePopover, ...closeProps } = props;
129
- const context = usePopoverInternalContext(CLOSE_NAME, __scopePopover);
130
- return <YStack {...closeProps} ref={forwardedRef} onPress={composeEventHandlers(props.onPress, () => context.onOpenChange(false))} />;
131
- });
141
+ const PopoverClose = React.forwardRef(
142
+ (props, forwardedRef) => {
143
+ const { __scopePopover, ...closeProps } = props;
144
+ const context = usePopoverInternalContext(CLOSE_NAME, __scopePopover);
145
+ return <YStack {...closeProps} ref={forwardedRef} onPress={composeEventHandlers(props.onPress, () => context.onOpenChange(false))} />;
146
+ }
147
+ );
132
148
  PopoverClose.displayName = CLOSE_NAME;
133
149
  const ARROW_NAME = "PopoverArrow";
134
- const PopoverArrow = React.forwardRef((props, forwardedRef) => {
135
- const { __scopePopover, ...arrowProps } = props;
136
- const popperScope = usePopoverScope(__scopePopover);
137
- return <PopperArrow {...popperScope} {...arrowProps} ref={forwardedRef} />;
138
- });
150
+ const PopoverArrow = React.forwardRef(
151
+ (props, forwardedRef) => {
152
+ const { __scopePopover, ...arrowProps } = props;
153
+ const popperScope = usePopoverScope(__scopePopover);
154
+ return <PopperArrow {...popperScope} {...arrowProps} ref={forwardedRef} />;
155
+ }
156
+ );
139
157
  PopoverArrow.displayName = ARROW_NAME;
140
- const Popover = withStaticProperties((props) => {
141
- const {
142
- __scopePopover,
143
- children,
144
- open: openProp,
145
- defaultOpen,
146
- onOpenChange,
147
- modal = true,
148
- ...restProps
149
- } = props;
150
- const popperScope = usePopoverScope(__scopePopover);
151
- const triggerRef = React.useRef(null);
152
- const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);
153
- const [open, setOpen] = useControllableState({
154
- prop: openProp,
155
- defaultProp: defaultOpen || false,
156
- onChange: onOpenChange
157
- });
158
- const useFloatingFn = /* @__PURE__ */ __name((props2) => {
159
- const floating = useFloating({
160
- ...props2,
161
- open,
162
- onOpenChange: setOpen
163
- });
164
- const { getReferenceProps, getFloatingProps } = useInteractions([
165
- useFocus(floating.context),
166
- useRole(floating.context, { role: "dialog" }),
167
- useDismiss(floating.context)
168
- ]);
169
- return {
170
- ...floating,
171
- getReferenceProps,
172
- getFloatingProps
173
- };
174
- }, "useFloatingFn");
175
- const useFloatingContext = React.useCallback(useFloatingFn, [open]);
176
- return <FloatingOverrideContext.Provider value={useFloatingContext}><Popper {...popperScope} {...restProps}><PopoverProviderInternal scope={__scopePopover} contentId={useId()} triggerRef={triggerRef} open={open} onOpenChange={setOpen} onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])} hasCustomAnchor={hasCustomAnchor} onCustomAnchorAdd={React.useCallback(() => setHasCustomAnchor(true), [])} onCustomAnchorRemove={React.useCallback(() => setHasCustomAnchor(false), [])} modal={modal}>{children}</PopoverProviderInternal></Popper></FloatingOverrideContext.Provider>;
177
- }, {
178
- Anchor: PopoverAnchor,
179
- Arrow: PopoverArrow,
180
- Trigger: PopoverTrigger,
181
- Content: PopoverContent,
182
- Close: PopoverClose
158
+ const SHEET_CONTENTS_NAME = "PopoverSheetContents";
159
+ const PopoverSheetContents = ({ __scopePopover }) => {
160
+ const context = usePopoverInternalContext(SHEET_CONTENTS_NAME, __scopePopover);
161
+ return <PortalHost name={`${context.scopeKey}SheetContents`} />;
162
+ };
163
+ PopoverSheetContents.displayName = SHEET_CONTENTS_NAME;
164
+ const PopoverScrollView = React.forwardRef((props, ref) => {
165
+ return <ScrollView ref={ref} {...props} />;
183
166
  });
167
+ const Popover = withStaticProperties(
168
+ (props) => {
169
+ const {
170
+ __scopePopover,
171
+ children,
172
+ open: openProp,
173
+ defaultOpen,
174
+ onOpenChange,
175
+ sheetBreakpoint = false,
176
+ ...restProps
177
+ } = props;
178
+ const popperScope = usePopoverScope(__scopePopover);
179
+ const triggerRef = React.useRef(null);
180
+ const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);
181
+ const [open, setOpen] = useControllableState({
182
+ prop: openProp,
183
+ defaultProp: defaultOpen || false,
184
+ onChange: onOpenChange
185
+ });
186
+ const breakpointActive = useSheetBreakpointActive(sheetBreakpoint);
187
+ const useFloatingContext = React.useCallback(
188
+ (props2) => {
189
+ const floating = useFloating({
190
+ ...props2,
191
+ open,
192
+ onOpenChange: setOpen
193
+ });
194
+ const { getReferenceProps, getFloatingProps } = useInteractions([
195
+ useFocus(floating.context, {
196
+ enabled: !breakpointActive
197
+ }),
198
+ useRole(floating.context, { role: "dialog" }),
199
+ useDismiss(floating.context, {
200
+ enabled: !breakpointActive
201
+ })
202
+ ]);
203
+ return {
204
+ ...floating,
205
+ getReferenceProps,
206
+ getFloatingProps
207
+ };
208
+ },
209
+ [breakpointActive, open, setOpen]
210
+ );
211
+ return <FloatingOverrideContext.Provider value={useFloatingContext}><Popper {...popperScope} stayInFrame {...restProps}><PopoverProviderInternal scope={__scopePopover} scopeKey={__scopePopover ? Object.keys(__scopePopover)[0] : ""} sheetBreakpoint={sheetBreakpoint} contentId={useId()} triggerRef={triggerRef} open={open} onOpenChange={setOpen} onOpenToggle={useEvent(() => {
212
+ if (open && breakpointActive) {
213
+ return;
214
+ }
215
+ setOpen(!open);
216
+ })} hasCustomAnchor={hasCustomAnchor} onCustomAnchorAdd={React.useCallback(() => setHasCustomAnchor(true), [])} onCustomAnchorRemove={React.useCallback(() => setHasCustomAnchor(false), [])}><PopoverSheetController onOpenChange={setOpen} __scopePopover={__scopePopover}>{children}</PopoverSheetController></PopoverProviderInternal></Popper></FloatingOverrideContext.Provider>;
217
+ },
218
+ {
219
+ Anchor: PopoverAnchor,
220
+ Arrow: PopoverArrow,
221
+ Trigger: PopoverTrigger,
222
+ Content: PopoverContent,
223
+ Close: PopoverClose,
224
+ SheetContents: PopoverSheetContents,
225
+ ScrollView: PopoverScrollView,
226
+ Sheet: ControlledSheet
227
+ }
228
+ );
184
229
  Popover.displayName = POPOVER_NAME;
185
230
  function getState(open) {
186
231
  return open ? "open" : "closed";
187
232
  }
188
- __name(getState, "getState");
233
+ const PopoverSheetController = (props) => {
234
+ const context = usePopoverInternalContext("PopoverSheetController", props.__scopePopover);
235
+ const showSheet = useShowPopoverSheet(context);
236
+ const breakpointActive = useSheetBreakpointActive(context.sheetBreakpoint);
237
+ const getShowSheet = useGet(showSheet);
238
+ return <SheetController onOpenChange={(val) => {
239
+ if (getShowSheet()) {
240
+ props.onOpenChange(val);
241
+ }
242
+ }} open={context.open} hidden={breakpointActive === false}>{props.children}</SheetController>;
243
+ };
244
+ const useSheetBreakpointActive = (breakpoint) => {
245
+ const media = useMedia();
246
+ return breakpoint ? media[breakpoint] : false;
247
+ };
248
+ const useShowPopoverSheet = (context) => {
249
+ if (!isWeb)
250
+ return true;
251
+ const breakpointActive = useSheetBreakpointActive(context.sheetBreakpoint);
252
+ return context.open === false ? false : breakpointActive;
253
+ };
189
254
  export {
190
255
  Popover,
191
256
  PopoverAnchor,
192
257
  PopoverArrow,
193
258
  PopoverClose,
194
259
  PopoverContent,
260
+ PopoverSheetContents,
195
261
  PopoverTrigger,
196
262
  __PopoverProviderInternal,
197
263
  createPopoverScope,
198
264
  usePopoverScope
199
265
  };
266
+ //# sourceMappingURL=Popover.js.map