{"version":3,"sources":["../src/internal/components/Backdrop.tsx","../src/internal/resolveSize.ts","../src/internal/components/SheetContainer.tsx","../src/internal/components/PopoverContainer.tsx","../src/internal/QuickPreviewRoot.tsx","../src/QuickPreviewAPI.ts","../src/context.tsx","../src/useQuickPreview.ts","../src/headless/QuickPreview.tsx","../src/internal/components/QuickPreviewScrollView.tsx","../src/addons/QuickPreviewPressable.tsx"],"names":["React","_a","useSharedValue","withTiming","useAnimatedStyle","jsx","Animated","StyleSheet","Easing","View","styles","_b","_c","_d","jsxs","QuickPreview","Portal","Gesture","runOnJS","GestureDetector"],"mappings":"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","file":"index.mjs","sourcesContent":["import React from 'react'\nimport { Pressable, StyleSheet } from 'react-native'\nimport Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated'\n\nexport function Backdrop({\n  onPress,\n  dismissOnBackdropPress = true,\n}: {\n  onPress?: () => void\n  dismissOnBackdropPress?: boolean\n}) {\n  const opacity = useSharedValue(0)\n  React.useEffect(() => {\n    opacity.value = withTiming(1, { duration: 160 })\n    return () => { opacity.value = 0 }\n  }, [opacity])\n\n  const style = useAnimatedStyle(() => ({\n    backgroundColor: 'rgba(0,0,0,0.5)',\n    ...StyleSheet.absoluteFillObject,\n    opacity: opacity.value,\n  }))\n\n  return (\n    <Animated.View style={style} pointerEvents={dismissOnBackdropPress && onPress ? 'auto' : 'none'}>\n      {dismissOnBackdropPress && onPress ? (\n        <Pressable\n          style={StyleSheet.absoluteFill}\n          onPress={onPress}\n          accessibilityRole=\"button\"\n          accessibilityLabel=\"Close preview\"\n        />\n      ) : null}\n    </Animated.View>\n  )\n}\n","import type { QuickPreviewSize } from '../types'\n\n/**\n * Turn the public `size` option into container style constraints.\n * 'auto' (or undefined) applies nothing; a number caps the height;\n * an object caps height and/or width.\n */\nexport function resolveSizeStyle(\n  size?: QuickPreviewSize\n): { maxHeight?: number; maxWidth?: number } {\n  if (size == null || size === 'auto') return {}\n  if (typeof size === 'number') return { maxHeight: size }\n  const out: { maxHeight?: number; maxWidth?: number } = {}\n  if (typeof size.maxHeight === 'number') out.maxHeight = size.maxHeight\n  if (typeof size.maxWidth === 'number') out.maxWidth = size.maxWidth\n  return out\n}\n","import React from 'react'\nimport { View, StyleSheet } from 'react-native'\nimport Animated, { Easing, useAnimatedStyle, useSharedValue, withTiming, runOnJS } from 'react-native-reanimated'\nimport { Gesture, GestureDetector } from 'react-native-gesture-handler'\nimport type { QuickPreviewOptions } from '../../types'\nimport { resolveSizeStyle } from '../resolveSize'\n\nexport function SheetContainer({\n  children,\n  options,\n  insets,\n  onRequestClose,\n}: {\n  children: React.ReactNode\n  options?: QuickPreviewOptions\n  insets: { top: number; bottom: number }\n  onRequestClose: () => void\n}) {\n  const translateY = useSharedValue(1000)\n  const dismissOnPanDown = options?.dismissOnPanDown ?? true\n\n  React.useEffect(() => {\n    // Smooth slide up, no spring bounce.\n    translateY.value = withTiming(0, { duration: 300, easing: Easing.out(Easing.cubic) })\n  }, [translateY])\n\n  const pan = Gesture.Pan()\n    .onUpdate((e) => {\n      if (!dismissOnPanDown) return\n      translateY.value = Math.max(0, e.translationY)\n    })\n    .onEnd((e) => {\n      const shouldClose = e.velocityY > 1000 || translateY.value > 140\n      if (shouldClose) {\n        translateY.value = withTiming(800, { duration: 200 }, (finished) => {\n          if (finished) runOnJS(onRequestClose)()\n        })\n      } else {\n        translateY.value = withTiming(0, { duration: 240, easing: Easing.out(Easing.cubic) })\n      }\n    })\n\n  const style = useAnimatedStyle(() => ({\n    transform: [{ translateY: translateY.value }],\n  }))\n\n  const sizeStyle = resolveSizeStyle(options?.size)\n\n  return (\n    <GestureDetector gesture={pan}>\n      <Animated.View\n        style={[styles.sheet, sizeStyle, style, { paddingBottom: Math.max(insets.bottom, 12) }]}\n        accessibilityRole={options?.accessibilityRole}\n        accessibilityLabel={options?.accessibilityLabel ?? 'Quick preview'}\n      >\n        <View style={styles.grabber} />\n        {children}\n      </Animated.View>\n    </GestureDetector>\n  )\n}\n\nconst styles = StyleSheet.create({\n  sheet: {\n    position: 'absolute',\n    left: 0,\n    right: 0,\n    bottom: 0,\n    borderTopLeftRadius: 16,\n    borderTopRightRadius: 16,\n    paddingTop: 8,\n    backgroundColor: 'white',\n    overflow: 'hidden',\n    elevation: 3,\n  },\n  grabber: {\n    alignSelf: 'center',\n    width: 40,\n    height: 4,\n    borderRadius: 2,\n    backgroundColor: 'rgba(0,0,0,0.2)',\n    marginBottom: 8,\n  },\n})\n","import React from 'react'\nimport { View, StyleSheet } from 'react-native'\nimport Animated, { Easing, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated'\nimport type { QuickPreviewOptions } from '../../types'\nimport { resolveSizeStyle } from '../resolveSize'\n\nexport function PopoverContainer({\n  children,\n  options,\n  insets: _insets,\n  onRequestClose: _onRequestClose, // kept for API parity with SheetContainer\n}: {\n  children: React.ReactNode\n  options?: QuickPreviewOptions\n  insets: { top: number; bottom: number }\n  onRequestClose: () => void\n}) {\n  const scale = useSharedValue(0.96)\n  const opacity = useSharedValue(0)\n\n  React.useEffect(() => {\n    // Smooth ease-out, no spring overshoot — a clean, quick \"pop\" in.\n    scale.value = withTiming(1, { duration: 200, easing: Easing.out(Easing.cubic) })\n    opacity.value = withTiming(1, { duration: 160, easing: Easing.out(Easing.quad) })\n  }, [scale, opacity])\n\n  const container = useAnimatedStyle(() => ({\n    opacity: opacity.value,\n    transform: [{ scale: scale.value }],\n  }))\n\n  const sizeStyle = resolveSizeStyle(options?.size)\n\n  return (\n    <View style={[StyleSheet.absoluteFill, styles.center]} pointerEvents=\"box-none\">\n      <Animated.View\n        style={[styles.card, sizeStyle, container]}\n        accessibilityRole={options?.accessibilityRole}\n        accessibilityLabel={options?.accessibilityLabel ?? 'Quick preview'}\n      >\n        {children}\n      </Animated.View>\n    </View>\n  )\n}\n\nconst styles = StyleSheet.create({\n  center: { justifyContent: 'center', alignItems: 'center' },\n  card: {\n    maxWidth: 520,\n    width: '92%',\n    maxHeight: '86%',\n    borderRadius: 16,\n    backgroundColor: 'white',\n    overflow: 'hidden',\n    elevation: 3,\n  },\n})\n","import React from 'react'\nimport { StyleSheet, View } from 'react-native'\nimport Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated'\nimport { SafeAreaInsetsContext } from 'react-native-safe-area-context'\nimport { QuickPreviewOptions } from '../types'\nimport { Backdrop } from './components/Backdrop'\nimport { SheetContainer } from './components/SheetContainer'\nimport { PopoverContainer } from './components/PopoverContainer'\n\nexport function QuickPreviewRoot({\n  options,\n  onRequestClose,\n  children,\n}: {\n  options?: QuickPreviewOptions\n  onRequestClose: () => void\n  children: React.ReactNode\n}) {\n  // Read insets from context directly so a missing <SafeAreaProvider> degrades\n  // to zero insets instead of throwing. useSafeAreaInsets() would crash the host\n  // app when no provider is mounted; the peek only needs insets to clear the\n  // notch / home indicator, so zero is a safe fallback (provider still recommended).\n  const insets = React.useContext(SafeAreaInsetsContext)\n  const top = insets?.top ?? 0\n  const bottom = insets?.bottom ?? 0\n  const variant = options?.variant ?? 'popover'\n  const dismissOnBackdropPress = options?.dismissOnBackdropPress ?? true\n\n  const opacity = useSharedValue(0)\n\n  const cbs = React.useRef({\n    onOpenStart: options?.onOpenStart,\n    onOpenEnd: options?.onOpenEnd,\n    onCloseStart: options?.onCloseStart,\n    onCloseEnd: options?.onCloseEnd,\n  })\n  React.useEffect(() => {\n    cbs.current = {\n      onOpenStart: options?.onOpenStart,\n      onOpenEnd: options?.onOpenEnd,\n      onCloseStart: options?.onCloseStart,\n      onCloseEnd: options?.onCloseEnd,\n    }\n  }, [options?.onOpenStart, options?.onOpenEnd, options?.onCloseStart, options?.onCloseEnd])\n\n  React.useEffect(() => {\n    cbs.current.onOpenStart?.()\n    opacity.value = withTiming(1, { duration: 180 }, finished => {\n      if (finished) cbs.current.onOpenEnd?.()\n    })\n    return () => {\n      cbs.current.onCloseStart?.()\n      cbs.current.onCloseEnd?.()\n    }\n    // run once (mount-only effect)\n  }, [])\n\n  const containerStyle = useAnimatedStyle(() => ({ opacity: opacity.value }))\n\n  return (\n    <View style={StyleSheet.absoluteFill} pointerEvents=\"box-none\" accessibilityViewIsModal>\n      <Animated.View style={[StyleSheet.absoluteFill, containerStyle]} pointerEvents=\"box-none\">\n        <Backdrop\n          onPress={dismissOnBackdropPress ? onRequestClose : undefined}\n          dismissOnBackdropPress={dismissOnBackdropPress}\n        />\n        {variant === 'sheet' ? (\n          <SheetContainer insets={{ top, bottom }} options={options} onRequestClose={onRequestClose}>\n            {children}\n          </SheetContainer>\n        ) : (\n          <PopoverContainer insets={{ top, bottom }} options={options} onRequestClose={onRequestClose}>\n            {children}\n          </PopoverContainer>\n        )}\n      </Animated.View>\n    </View>\n  )\n}\n","// src/QuickPreviewAPI.ts\nimport type { QuickPreviewController, QuickPreviewOptions } from './types'\nimport type React from 'react'\n\n// Persist across Fast Refresh / HMR\nconst STORE = Symbol.for('rnqp.controller')\ntype Store = { controller: QuickPreviewController | null }\nconst g = globalThis as Record<symbol, Store | undefined>\nconst store: Store = g[STORE] ?? (g[STORE] = { controller: null })\n\nfunction warn() {\n  // __DEV__ is provided by RN/Metro; if TS complains, declare it in a globals.d.ts\n  if (typeof __DEV__ !== 'undefined' && __DEV__) {\n    // eslint-disable-next-line no-console\n    console.warn('[react-native-quick-preview] PreviewProvider not mounted yet.')\n  }\n}\n\n/**\n * A static handle to the same controller as {@link useQuickPreview} — callable\n * from anywhere, including outside React (services, store actions, event handlers).\n * Before `<PreviewProvider>` mounts it is a safe no-op (with a dev warning).\n *\n * @example\n * ```ts\n * import { QuickPreview } from 'react-native-quick-preview'\n *\n * QuickPreview.present(<Card />, { variant: 'sheet' })\n * QuickPreview.update({ size: { maxHeight: 480 } })\n * QuickPreview.close()\n * ```\n */\nexport const QuickPreview = {\n  /** @internal Registered by `<PreviewProvider />`. Not part of the public API. */\n  _set(c: QuickPreviewController | null) {\n    store.controller = c\n  },\n\n  /**\n   * Present `node` as the preview. Replaces the content if one is already open.\n   * @param node - the React element to show inside the preview.\n   * @param opts - presentation options ({@link QuickPreviewOptions}).\n   */\n  present(node: React.ReactNode, opts?: Partial<QuickPreviewOptions>) {\n    const c = store.controller\n    c ? c.present(node, opts) : warn()\n  },\n\n  /** Dismiss the current preview. No-op if nothing is open. */\n  close() {\n    const c = store.controller\n    c ? c.close() : warn()\n  },\n\n  /** Merge new options into the currently open preview. */\n  update(opts: Partial<QuickPreviewOptions>) {\n    const c = store.controller\n    c ? c.update(opts) : warn()\n  },\n\n  /** Whether a preview is currently open. */\n  isOpen() {\n    return !!store.controller?.isOpen()\n  },\n\n  /** @internal Dev/test convenience — don't use in app code. */\n  __unsafe_getController(): QuickPreviewController | null {\n    return store.controller\n  },\n} as const\n","import React from 'react'\nimport { BackHandler, AccessibilityInfo } from 'react-native'\nimport { Host, Portal } from 'react-native-portalize'\nimport { QuickPreviewOptions, QuickPreviewController } from './types'\nimport { QuickPreviewRoot } from './internal/QuickPreviewRoot'\nimport { QuickPreview as QuickPreviewStatic } from './QuickPreviewAPI'\n\nexport const QuickPreviewContext = React.createContext<QuickPreviewController | null>(null)\n\n/**\n * Hosts the preview layer and registers the controller. Mount this once, near the\n * root of your app, inside a `<GestureHandlerRootView>`. After it's mounted you can\n * present previews via {@link useQuickPreview} or the static `QuickPreview` handle.\n *\n * @example\n * ```tsx\n * <GestureHandlerRootView style={{ flex: 1 }}>\n *   <PreviewProvider>\n *     <YourApp />\n *   </PreviewProvider>\n * </GestureHandlerRootView>\n * ```\n */\nexport function PreviewProvider({ children }: { children: React.ReactNode }) {\n  const [content, setContent] = React.useState<React.ReactNode | null>(null)\n  const [options, setOptions] = React.useState<QuickPreviewOptions | undefined>(undefined)\n  const openRef = React.useRef(false)\n\n  const announce = React.useCallback((msg: string) => {\n    // eslint-disable-next-line no-empty\n    try { AccessibilityInfo.announceForAccessibility?.(msg) } catch {}\n  }, [])\n\n  const close = React.useCallback(() => {\n    if (!openRef.current) return\n    openRef.current = false\n    setContent(null)\n    setOptions(undefined)\n    announce('Quick preview closed')\n  }, [announce])\n\n  const present = React.useCallback(\n    (node: React.ReactNode, opts?: Partial<QuickPreviewOptions>) => {\n      // Replace, don't merge: options from a previous presentation must not\n      // leak into the next one. Merging is what update() is for.\n      setOptions(opts)\n      openRef.current = true\n      setContent(() => node)\n      announce('Quick preview opened')\n    },\n    [announce]\n  )\n\n  const update = React.useCallback((opts: Partial<QuickPreviewOptions>) => {\n    setOptions(prev => ({ ...prev, ...opts }))\n  }, [])\n\n  React.useEffect(() => {\n    const sub = BackHandler.addEventListener('hardwareBackPress', () => {\n      if (openRef.current) { close(); return true }\n      return false\n    })\n    return () => sub.remove()\n  }, [close])\n\n  const value = React.useMemo<QuickPreviewController>(\n    () => ({ present, close, update, isOpen: () => openRef.current }),\n    [present, close, update]\n  )\n\n  // Register the static API (layout effect = available ASAP)\n  React.useLayoutEffect(() => {\n    QuickPreviewStatic._set(value)\n    return () => QuickPreviewStatic._set(null)\n  }, [value])\n\n  return (\n    <QuickPreviewContext.Provider value={value}>\n      <Host>\n        {children}\n        {content ? (\n          <Portal>\n            <QuickPreviewRoot options={options} onRequestClose={close}>\n              {content}\n            </QuickPreviewRoot>\n          </Portal>\n        ) : null}\n      </Host>\n    </QuickPreviewContext.Provider>\n  )\n}\n","import React from 'react'\nimport { QuickPreviewContext } from './context'\nimport type { QuickPreviewController } from './types'\n\n/**\n * Access the {@link QuickPreviewController} to open, update, and close previews\n * from inside a React component. Must be called under a mounted `<PreviewProvider>`.\n *\n * @throws if used outside of a `<PreviewProvider>`.\n * @returns the controller: `{ present, close, update, isOpen }`.\n *\n * @example\n * ```tsx\n * function ProductCard({ product }) {\n *   const { present } = useQuickPreview()\n *   return (\n *     <Pressable onLongPress={() => present(<ProductPreview product={product} />, { variant: 'sheet' })}>\n *       <Thumbnail source={product.image} />\n *     </Pressable>\n *   )\n * }\n * ```\n */\nexport function useQuickPreview(): QuickPreviewController {\n  const ctx = React.useContext(QuickPreviewContext)\n  if (!ctx) throw new Error('useQuickPreview must be used within <PreviewProvider>')\n  return ctx\n}\n","import React from 'react'\nimport { Portal } from 'react-native-portalize'\nimport { QuickPreviewOptions } from '../types'\nimport { QuickPreviewRoot } from '../internal/QuickPreviewRoot'\n\n/**\n * Props for the controlled, headless `QuickPreviewComponent`. Extends\n * {@link QuickPreviewOptions} (so `variant`, `size`, `dismissOn*`, and the\n * lifecycle callbacks are all accepted).\n */\nexport type HeadlessQuickPreviewProps = {\n  /** Whether the preview is shown. You own this state. */\n  visible: boolean\n  /** Called when the preview requests to close (backdrop press, swipe, back button). */\n  onClose: () => void\n  /**\n   * Render into a portal above the app. Disable only if you're providing your\n   * own host/overlay.\n   * @defaultValue `true`\n   */\n  portal?: boolean\n} & Partial<QuickPreviewOptions> & {\n  /** The preview content. */\n  children: React.ReactNode\n}\n\n/**\n * A controlled, headless preview component — you own the `visible` state. Useful\n * when you prefer a declarative component over the imperative\n * {@link useQuickPreview} hook or the static `QuickPreview` handle.\n *\n * Exported as `QuickPreviewComponent`.\n *\n * @example\n * ```tsx\n * const [visible, setVisible] = useState(false)\n * <QuickPreviewComponent visible={visible} onClose={() => setVisible(false)} variant=\"sheet\">\n *   <Card />\n * </QuickPreviewComponent>\n * ```\n */\nexport function QuickPreview({\n  visible,\n  onClose,\n  portal = true,\n  children,\n  ...opts\n}: HeadlessQuickPreviewProps) {\n  if (!visible) return null\n  const node = (\n    <QuickPreviewRoot options={opts} onRequestClose={onClose}>\n      {children}\n    </QuickPreviewRoot>\n  )\n  return portal ? <Portal>{node}</Portal> : node\n}\n","import React from 'react'\nimport { ScrollView, ScrollViewProps } from 'react-native'\n\n/**\n * A gesture-aware `ScrollView` for use inside preview content. Use it instead of\n * a plain `ScrollView` so that scrolling the content and the swipe-to-dismiss\n * gesture don't fight each other. Accepts all `ScrollViewProps`.\n *\n * @example\n * ```tsx\n * present(\n *   <QuickPreviewScrollView>\n *     <LongArticle />\n *   </QuickPreviewScrollView>,\n *   { variant: 'sheet', size: { maxHeight: 520 } }\n * )\n * ```\n */\nexport function QuickPreviewScrollView(props: ScrollViewProps) {\n  return <ScrollView nestedScrollEnabled {...props} />\n}\n","import React from 'react'\nimport type { StyleProp, ViewStyle } from 'react-native'\nimport { Gesture, GestureDetector } from 'react-native-gesture-handler'\nimport Animated, {\n  runOnJS,\n  useAnimatedStyle,\n  useSharedValue,\n  withTiming,\n} from 'react-native-reanimated'\nimport { QuickPreview } from '../QuickPreviewAPI'\nimport type { QuickPreviewOptions } from '../types'\n\nexport type QuickPreviewPressableProps = {\n  children: React.ReactNode\n  /** Called for a normal tap (e.g., navigate) */\n  onPress?: () => void\n  /** Return the preview node to present */\n  renderPreview: () => React.ReactNode\n  /** Options forwarded to QuickPreview.present */\n  previewOptions?: Partial<QuickPreviewOptions>\n  /** Long-press delay (ms). Default 350 */\n  delay?: number\n  /** Press-down scale. Default 0.98 */\n  scale?: number\n  /**\n   * Called on the JS thread when the long press activates, right before the\n   * preview opens. Wire up haptics here, e.g.:\n   *   onLongPressStart={() => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium)}\n   * The library deliberately does not import expo-haptics itself: an optional\n   * require would break Metro bundling for apps that don't have it installed.\n   */\n  onLongPressStart?: () => void\n  /** Disable all interactions */\n  disabled?: boolean\n  /** Style applied to the animated wrapper (the thing that scales) */\n  style?: StyleProp<ViewStyle>\n  /** Accessibility */\n  accessible?: boolean\n  accessibilityLabel?: string\n  testID?: string\n}\n\nexport function QuickPreviewPressable({\n  children,\n  onPress,\n  renderPreview,\n  previewOptions,\n  delay = 350,\n  scale = 0.98,\n  onLongPressStart,\n  disabled = false,\n  style,\n  accessible,\n  accessibilityLabel,\n  testID,\n}: QuickPreviewPressableProps) {\n  const s = useSharedValue(1)\n\n  // Runs on the JS thread: renderPreview() creates React elements, which must\n  // never happen on the UI thread inside a worklet.\n  const openPreview = () => {\n    onLongPressStart?.()\n    QuickPreview.present(renderPreview(), {\n      variant: 'popover',\n      dismissOnBackdropPress: true,\n      ...previewOptions,\n    })\n  }\n\n  const longPress = Gesture.LongPress()\n    .enabled(!disabled)\n    .minDuration(delay)\n    .onTouchesDown(() => {\n      s.value = withTiming(scale, { duration: 90 })\n    })\n    .onFinalize(() => {\n      s.value = withTiming(1, { duration: 120 })\n    })\n    .onStart(() => {\n      runOnJS(openPreview)()\n    })\n\n  const tap = Gesture.Tap()\n    .enabled(!disabled)\n    .maxDuration(220)\n    .onTouchesDown(() => {\n      s.value = withTiming(scale, { duration: 90 })\n    })\n    .onFinalize(() => {\n      s.value = withTiming(1, { duration: 120 })\n    })\n    .onEnd(() => {\n      if (onPress) runOnJS(onPress)()\n    })\n\n  const gesture = Gesture.Exclusive(longPress, tap)\n\n  const animated = useAnimatedStyle(() => ({\n    transform: [{ scale: s.value }],\n  }))\n\n  return (\n    <GestureDetector gesture={gesture}>\n      <Animated.View\n        style={[animated, style]}\n        accessible={accessible}\n        accessibilityRole=\"button\"\n        accessibilityLabel={accessibilityLabel}\n        testID={testID}\n      >\n        {children}\n      </Animated.View>\n    </GestureDetector>\n  )\n}\n"]}