{"version":3,"file":"animatedSizeEnhance.mjs","names":["React","useForkRef","useEnhancedEffect","uniqueId","animatedSizeEnhance","_ref","_ref$animateProps","animateProps","_ref$onChangeOf","onChangeOf","props","ref","__animatedEnhanceInstanceId","duration","other","_objectWithoutProperties","_excluded","nodeRef","createRef","lastSizesRef","useRef","prevPropsRef","animatedSizeInstanceIdRef","current","animationsDisabled","undefined","node","every","value","i","length","getBoundingClientRect","sizes","Math","abs","style","getPropertyValue","endsWith","transition","concat","timeout","handleTransitionEnd","clearTimeout","removeEventListener","animationFrame","requestAnimationFrame","addEventListener","setTimeout","cancelAnimationFrame","_toConsumableArray","map","propName","_objectSpread"],"sources":["../../src/enhances/animatedSizeEnhance.tsx"],"sourcesContent":["import React from 'react';\nimport { useForkRef } from '../ref';\nimport useEnhancedEffect from '../use/useEnhancedEffect';\nimport { UnknownProperties } from '../core';\n\n/** @deprecated */\nexport interface IWithAnimatedSizeEnhanceProps\n  extends WithAnimatedSizeEnhanceProps,\n    UnknownProperties {}\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          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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"}