{"version":3,"file":"index.mjs","names":["createContext","RefObject","ResizableContext","panelRef","HTMLDivElement","containerRef","scaleFactor","clsx","ComponentProps","useEffect","useMemo","useRef","useState","ResizableContext","Props","scaleFactor","Resizable","children","className","rest","isDragging","setIsDragging","containerRef","HTMLDivElement","panelRef","context","current","observer","window","ResizeObserver","target","width","getBoundingClientRect","style","setProperty","observe","disconnect","ComponentProps","useCallback","useContext","ResizableContext","clsx","Props","widthCustomClassName","ResizableHandle","t0","$","_c","className","rest","t1","undefined","context","Error","t2","containerRef","panelRef","scaleFactor","e","current","containerRect","getBoundingClientRect","width","pageX","left","style","setProperty","_temp","handlePointerMove","t3","handler","document","removeEventListener","body","classList","remove","handlePointerUp","t4","handlePointerDown","addEventListener","once","add","t5","t6","t7","t8","Symbol","for","t9","_temp2","e_0","stopPropagation","documentElement","removeProperty","ComponentProps","useContext","ResizableContext","clsx","Props","widthCustomClassName","ResizablePanel","className","rest","context","Error","panelRef"],"sources":["../../../src/components/resizable/context.ts","../../../src/components/resizable/Resizable.tsx","../../../src/components/resizable/ResizableHandle.tsx","../../../src/components/resizable/ResizablePanel.tsx"],"sourcesContent":["import { createContext, RefObject } from \"react\";\n\nexport const ResizableContext = createContext<{\n  panelRef: RefObject<HTMLDivElement | null>;\n  containerRef: RefObject<HTMLDivElement>;\n  scaleFactor: number;\n} | null>(null);\n","import clsx from \"clsx\";\nimport { ComponentProps, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ResizableContext } from \"./context\";\n\ninterface Props extends ComponentProps<\"div\"> {\n  scaleFactor?: number;\n}\n\nexport function Resizable({ children, className, scaleFactor = 100, ...rest }: Props) {\n  const [isDragging, setIsDragging] = useState(false);\n  const containerRef = useRef<HTMLDivElement>(null!);\n  const panelRef = useRef<HTMLDivElement>(null);\n\n  const context = useMemo(() => {\n    return {\n      panelRef,\n      containerRef,\n      isDragging,\n      setIsDragging,\n      scaleFactor,\n    };\n  }, [isDragging, scaleFactor]);\n\n  useEffect(() => {\n    if (!context.panelRef.current) {\n      return;\n    }\n    const observer = new window.ResizeObserver(([{ target }]) => {\n      const width = target.getBoundingClientRect().width ?? 0;\n      context.containerRef.current.style.setProperty(\n        \"--resizable-panel-width\",\n        `${(width * scaleFactor) / 100}px`,\n      );\n    });\n    observer.observe(context.panelRef.current);\n    return () => {\n      observer.disconnect();\n    };\n  }, [context.containerRef, context.panelRef, scaleFactor]);\n\n  return (\n    <ResizableContext.Provider value={context}>\n      <div ref={containerRef} className={clsx(className, \"relative\")} {...rest}>\n        {children}\n      </div>\n    </ResizableContext.Provider>\n  );\n}\n","import { ComponentProps, useCallback, useContext } from \"react\";\nimport { ResizableContext } from \"./context\";\nimport clsx from \"clsx\";\n\ninterface Props extends ComponentProps<\"div\"> {\n  widthCustomClassName?: string;\n}\n\nexport function ResizableHandle({\n  className,\n  widthCustomClassName = \"translate-x-(--resizable-panel-width)\",\n  ...rest\n}: Props) {\n  const context = useContext(ResizableContext);\n  if (!context) throw new Error(\"ResizableHandle must be a child of Resizable\");\n\n  const handlePointerMove = useCallback(\n    (e: MouseEvent) => {\n      if (!context.panelRef.current) {\n        return;\n      }\n      const cssVarName = \"--resizable-panel-width\";\n\n      const containerRect = context.panelRef.current.getBoundingClientRect();\n      const width = e.pageX - containerRect.left;\n      context.containerRef.current.style.setProperty(\n        cssVarName,\n        `${(width * context.scaleFactor) / 100}px`,\n      );\n      return () => {\n        document.documentElement.style.removeProperty(cssVarName);\n      };\n    },\n    [context.containerRef, context.panelRef, context.scaleFactor],\n  );\n\n  const handlePointerUp = useCallback(() => {\n    const handler = handlePointerMove;\n    document.removeEventListener(\"pointermove\", handler);\n    document.body.classList.remove(\"cursor-ew-resize\");\n\n    return () => {\n      document.removeEventListener(\"pointermove\", handler);\n    };\n  }, [handlePointerMove]);\n\n  function handlePointerDown() {\n    document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n    document.addEventListener(\"pointermove\", handlePointerMove);\n    document.body.classList.add(`cursor-ew-resize`);\n  }\n\n  return (\n    <div\n      className={clsx(\n        \"group pointer-events-auto absolute top-1/2 left-0 cursor-ew-resize max-lg:hidden\",\n        widthCustomClassName,\n      )}\n      onPointerDown={handlePointerDown}\n      onClick={(e) => e.stopPropagation()}\n    >\n      <div\n        className={clsx(\n          className,\n          \"bg-gray-5 group-hover:bg-gray-3 group-active:bg-gray-1 h-12 w-1.5 translate-x-1/2 -translate-y-1/2 rounded-full\",\n        )}\n        {...rest}\n      />\n      <div className=\"absolute top-0 left-0 h-32 w-16 -translate-x-1/2 -translate-y-1/2\"></div>\n    </div>\n  );\n}\n","import { ComponentProps, useContext } from \"react\";\nimport { ResizableContext } from \"./context\";\nimport clsx from \"clsx\";\n\ninterface Props extends ComponentProps<\"div\"> {\n  widthCustomClassName?: string;\n}\n\nexport function ResizablePanel({\n  className,\n  widthCustomClassName = \"w-(--resizable-panel-width)\",\n  ...rest\n}: Props) {\n  const context = useContext(ResizableContext);\n  if (!context) throw new Error(\"ResizablePanel must be a child of Resizable\");\n\n  return <div ref={context.panelRef} className={clsx(className, widthCustomClassName)} {...rest} />;\n}\n"],"mappings":"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"}