{"version":3,"file":"index54.cjs","sources":["../src/hooks/useDragToClose.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\ninterface UseDragToCloseProps {\n  isEnabled: boolean;\n  onClose?: () => void;\n  threshold?: number;\n}\n\ninterface UseDragToCloseResult {\n  dragHandlers: {\n    onTouchStart: (e: React.TouchEvent<HTMLDivElement>) => void;\n    onTouchMove: (e: React.TouchEvent<HTMLDivElement>) => void;\n    onTouchEnd: () => void;\n  };\n  dragStyles: {\n    transform: string | undefined;\n    transition: string | undefined;\n  };\n}\n\n/**\n * A hook that provides drag-to-close functionality for bottom sheets and modals\n * \n * @param isEnabled Whether the drag functionality is enabled\n * @param onClose Function to call when the drag threshold is exceeded\n * @param threshold Distance in pixels that triggers the close action (default: 150)\n * @returns Object containing drag handlers and styles to apply to the component\n */\nexport const useDragToClose = ({\n  isEnabled,\n  onClose,\n  threshold = 150,\n}: UseDragToCloseProps): UseDragToCloseResult => {\n  const [dragOffset, setDragOffset] = useState(0);\n  const dragStartY = useRef(0);\n\n  // Reset drag offset when enabled state changes\n  useEffect(() => {\n    setDragOffset(0);\n  }, [isEnabled]);\n\n  const handleTouchStart = (e: React.TouchEvent<HTMLDivElement>) => {\n    if (!isEnabled) return;\n    dragStartY.current = e.touches[0].clientY;\n  };\n\n  const handleTouchMove = (e: React.TouchEvent<HTMLDivElement>) => {\n    if (!isEnabled) return;\n    \n    const currentY = e.touches[0].clientY;\n    const deltaY = Math.max(0, currentY - dragStartY.current); // Only allow downward drag\n    \n    setDragOffset(deltaY);\n  };\n\n  const handleTouchEnd = () => {\n    if (!isEnabled) return;\n    \n    if (dragOffset > threshold) {\n      onClose?.();\n    }\n    \n    // Animate back to original position if not closing\n    setDragOffset(0);\n  };\n\n  return {\n    dragHandlers: {\n      onTouchStart: handleTouchStart,\n      onTouchMove: handleTouchMove,\n      onTouchEnd: handleTouchEnd,\n    },\n    dragStyles: {\n      transform: dragOffset > 0 ? `translateY(${dragOffset}px)` : undefined,\n      transition: dragOffset > 0 ? 'none' : 'transform 0.3s ease',\n    },\n  };\n};"],"names":["useState","useRef","useEffect"],"mappings":";;;AA4BO,MAAM,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,YAAY;AACd,MAAiD;AAC/C,QAAM,CAAC,YAAY,aAAa,IAAIA,MAAAA,SAAS,CAAC;AACxC,QAAA,aAAaC,aAAO,CAAC;AAG3BC,QAAAA,UAAU,MAAM;AACd,kBAAc,CAAC;AAAA,EAAA,GACd,CAAC,SAAS,CAAC;AAER,QAAA,mBAAmB,CAAC,MAAwC;AAChE,QAAI,CAAC,UAAW;AAChB,eAAW,UAAU,EAAE,QAAQ,CAAC,EAAE;AAAA,EACpC;AAEM,QAAA,kBAAkB,CAAC,MAAwC;AAC/D,QAAI,CAAC,UAAW;AAEhB,UAAM,WAAW,EAAE,QAAQ,CAAC,EAAE;AAC9B,UAAM,SAAS,KAAK,IAAI,GAAG,WAAW,WAAW,OAAO;AAExD,kBAAc,MAAM;AAAA,EACtB;AAEA,QAAM,iBAAiB,MAAM;AAC3B,QAAI,CAAC,UAAW;AAEhB,QAAI,aAAa,WAAW;AAChB;AAAA,IAAA;AAIZ,kBAAc,CAAC;AAAA,EACjB;AAEO,SAAA;AAAA,IACL,cAAc;AAAA,MACZ,cAAc;AAAA,MACd,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,IACA,YAAY;AAAA,MACV,WAAW,aAAa,IAAI,cAAc,UAAU,QAAQ;AAAA,MAC5D,YAAY,aAAa,IAAI,SAAS;AAAA,IAAA;AAAA,EAE1C;AACF;;"}