{"version":3,"file":"animatedSizeEnhance.mjs","names":["React","useForkRef","useEnhancedEffect","uniqueId","animatedSizeEnhance","animateProps","onChangeOf","props","ref","__animatedEnhanceInstanceId","duration","other","nodeRef","createRef","lastSizesRef","useRef","prevPropsRef","animatedSizeInstanceIdRef","current","animationsDisabled","undefined","node","every","value","i","length","getBoundingClientRect","sizes","Math","abs","style","getPropertyValue","endsWith","transition","timeout","handleTransitionEnd","clearTimeout","removeEventListener","animationFrame","requestAnimationFrame","addEventListener","setTimeout","cancelAnimationFrame","map","propName"],"sources":["../../../src/utils/enhances/animatedSizeEnhance.tsx"],"sourcesContent":["import React from 'react';\n\nimport { useForkRef } from '../ref';\nimport useEnhancedEffect from '../use/useEnhancedEffect';\n\nexport type WithAnimatedSizeEnhanceProps = {\n  animationsDisabled?: boolean;\n};\n\nlet uniqueId = 0;\n\nfunction animatedSizeEnhance({\n  animateProps = [],\n  onChangeOf = [],\n}: {\n  animateProps: ('width' | 'height')[];\n  onChangeOf: string[];\n}) {\n  return (props: any) => {\n    const { ref, __animatedEnhanceInstanceId, duration, ...other } = props;\n    const nodeRef = React.createRef<HTMLElement>();\n    const lastSizesRef = React.useRef<(number | undefined)[]>([]);\n    const prevPropsRef = React.useRef(props);\n    const animatedSizeInstanceIdRef = React.useRef(uniqueId++);\n\n    prevPropsRef.current = props;\n\n    useEnhancedEffect(() => {\n      if (props.animationsDisabled) return;\n      if (\n        __animatedEnhanceInstanceId !== undefined &&\n        __animatedEnhanceInstanceId !== animatedSizeInstanceIdRef.current\n      )\n        return;\n      if (!nodeRef.current) {\n        return;\n      }\n      const node = nodeRef.current;\n      if (lastSizesRef.current.every((value) => value === undefined)) {\n        for (let i = 0; i < animateProps.length; i++) {\n          // @ts-ignore\n          lastSizesRef.current[i] = node.getBoundingClientRect()[animateProps[i]];\n        }\n        return;\n      }\n\n      const sizes: (number | undefined)[] = [];\n      for (let i = 0; i < animateProps.length; i++) {\n        sizes[i] = node.getBoundingClientRect()[animateProps[i]];\n        if (\n          Math.abs(lastSizesRef.current[i]! - sizes[i]!) < 3 ||\n          node.style.getPropertyValue(animateProps[i]).endsWith('%')\n        ) {\n          lastSizesRef.current[i] = sizes[i];\n          sizes[i] = undefined;\n        }\n      }\n      if (sizes.every((value) => value === undefined)) return;\n\n      node.style.transition = 'none';\n      for (let i = 0; i < animateProps.length; i++) {\n        node.style[animateProps[i]] = `${lastSizesRef.current[i]}px`;\n      }\n      let timeout = -1;\n      const handleTransitionEnd = () => {\n        clearTimeout(timeout);\n        if (!node) return;\n        node.style.transition = null as any;\n        for (let i = 0; i < animateProps.length; i++) {\n          node.style[animateProps[i]] = null as any;\n        }\n        node.removeEventListener('transitionend', handleTransitionEnd);\n        node.removeEventListener('transitioncancel', handleTransitionEnd);\n      };\n      const animationFrame = requestAnimationFrame(() => {\n        if (!node) return;\n        node.addEventListener('transitionend', handleTransitionEnd);\n        node.addEventListener('transitioncancel', handleTransitionEnd);\n        node.style.transition = `${duration}ms all ease-in-out`;\n        for (let i = 0; i < animateProps.length; i++) {\n          lastSizesRef.current[i] = sizes[i];\n          node.style[animateProps[i]] = `${sizes[i]}px`;\n        }\n      });\n      timeout = setTimeout(handleTransitionEnd, 500) as any;\n      return () => {\n        cancelAnimationFrame(animationFrame);\n        handleTransitionEnd();\n      };\n    }, [\n      __animatedEnhanceInstanceId,\n      props.animationsDisabled,\n      duration,\n      ...onChangeOf.map((propName) => props[propName]),\n    ]);\n\n    return {\n      ref: useForkRef(ref, nodeRef),\n      __animatedEnhanceInstanceId: __animatedEnhanceInstanceId ?? animatedSizeInstanceIdRef.current,\n      ...other,\n    };\n  };\n}\n\nexport default animatedSizeEnhance;\n"],"mappings":"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","ignoreList":[]}