{"version":3,"sources":["../src/collapse.tsx"],"sourcesContent":["import { cx, warn } from \"@chakra-ui/shared-utils\"\nimport {\n  AnimatePresence,\n  HTMLMotionProps,\n  motion,\n  Variants as _Variants,\n} from \"framer-motion\"\nimport { forwardRef, useEffect, useState } from \"react\"\nimport {\n  TRANSITION_EASINGS,\n  Variants,\n  withDelay,\n  WithTransitionConfig,\n} from \"./transition-utils\"\n\nconst isNumeric = (value?: string | number) =>\n  value != null && parseInt(value.toString(), 10) > 0\n\nexport interface CollapseOptions {\n  /**\n   * If `true`, the opacity of the content will be animated\n   * @default true\n   */\n  animateOpacity?: boolean\n  /**\n   * The height you want the content in its collapsed state.\n   * @default 0\n   */\n  startingHeight?: number | string\n  /**\n   * The height you want the content in its expanded state.\n   * @default \"auto\"\n   */\n  endingHeight?: number | string\n}\n\nconst defaultTransitions = {\n  exit: {\n    height: { duration: 0.2, ease: TRANSITION_EASINGS.ease },\n    opacity: { duration: 0.3, ease: TRANSITION_EASINGS.ease },\n  },\n  enter: {\n    height: { duration: 0.3, ease: TRANSITION_EASINGS.ease },\n    opacity: { duration: 0.4, ease: TRANSITION_EASINGS.ease },\n  },\n}\n\nconst variants: Variants<CollapseOptions> = {\n  exit: ({\n    animateOpacity,\n    startingHeight,\n    transition,\n    transitionEnd,\n    delay,\n  }) => ({\n    ...(animateOpacity && { opacity: isNumeric(startingHeight) ? 1 : 0 }),\n    height: startingHeight,\n    transitionEnd: transitionEnd?.exit,\n    transition:\n      transition?.exit ?? withDelay.exit(defaultTransitions.exit, delay),\n  }),\n  enter: ({\n    animateOpacity,\n    endingHeight,\n    transition,\n    transitionEnd,\n    delay,\n  }) => ({\n    ...(animateOpacity && { opacity: 1 }),\n    height: endingHeight,\n    transitionEnd: transitionEnd?.enter,\n    transition:\n      transition?.enter ?? withDelay.enter(defaultTransitions.enter, delay),\n  }),\n}\n\nexport type ICollapse = CollapseProps\n\nexport interface CollapseProps\n  extends WithTransitionConfig<HTMLMotionProps<\"div\">>,\n    CollapseOptions {}\n\nexport const Collapse = forwardRef<HTMLDivElement, CollapseProps>(\n  (props, ref) => {\n    const {\n      in: isOpen,\n      unmountOnExit,\n      animateOpacity = true,\n      startingHeight = 0,\n      endingHeight = \"auto\",\n      style,\n      className,\n      transition,\n      transitionEnd,\n      ...rest\n    } = props\n\n    const [mounted, setMounted] = useState(false)\n    useEffect(() => {\n      const timeout = setTimeout(() => {\n        setMounted(true)\n      })\n      return () => clearTimeout(timeout)\n    }, [])\n\n    /**\n     * Warn 🚨: `startingHeight` and `unmountOnExit` are mutually exclusive\n     *\n     * If you specify a starting height, the collapsed needs to be mounted\n     * for the height to take effect.\n     */\n    warn({\n      condition: Number(startingHeight) > 0 && !!unmountOnExit,\n      message: `startingHeight and unmountOnExit are mutually exclusive. You can't use them together`,\n    })\n\n    const hasStartingHeight = parseFloat(startingHeight.toString()) > 0\n\n    const custom = {\n      startingHeight,\n      endingHeight,\n      animateOpacity,\n      transition: !mounted ? { enter: { duration: 0 } } : transition,\n      transitionEnd: {\n        enter: transitionEnd?.enter,\n        exit: unmountOnExit\n          ? transitionEnd?.exit\n          : {\n              ...transitionEnd?.exit,\n              display: hasStartingHeight ? \"block\" : \"none\",\n            },\n      },\n    }\n\n    const show = unmountOnExit ? isOpen : true\n    const animate = isOpen || unmountOnExit ? \"enter\" : \"exit\"\n\n    return (\n      <AnimatePresence initial={false} custom={custom}>\n        {show && (\n          <motion.div\n            ref={ref}\n            {...rest}\n            className={cx(\"chakra-collapse\", className)}\n            style={{\n              overflow: \"hidden\",\n              display: \"block\",\n              ...style,\n            }}\n            custom={custom}\n            variants={variants as _Variants}\n            initial={unmountOnExit ? \"exit\" : false}\n            animate={animate}\n            exit=\"exit\"\n          />\n        )}\n      </AnimatePresence>\n    )\n  },\n)\n\nCollapse.displayName = \"Collapse\"\n"],"mappings":";;;;;;;AAAA,SAAS,IAAI,YAAY;AACzB;AAAA,EACE;AAAA,EAEA;AAAA,OAEK;AACP,SAAS,YAAY,WAAW,gBAAgB;AAqItC;AA7HV,IAAM,YAAY,CAAC,UACjB,SAAS,QAAQ,SAAS,MAAM,SAAS,GAAG,EAAE,IAAI;AAoBpD,IAAM,qBAAqB;AAAA,EACzB,MAAM;AAAA,IACJ,QAAQ,EAAE,UAAU,KAAK,MAAM,mBAAmB,KAAK;AAAA,IACvD,SAAS,EAAE,UAAU,KAAK,MAAM,mBAAmB,KAAK;AAAA,EAC1D;AAAA,EACA,OAAO;AAAA,IACL,QAAQ,EAAE,UAAU,KAAK,MAAM,mBAAmB,KAAK;AAAA,IACvD,SAAS,EAAE,UAAU,KAAK,MAAM,mBAAmB,KAAK;AAAA,EAC1D;AACF;AAEA,IAAM,WAAsC;AAAA,EAC1C,MAAM,CAAC;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAG;AAtDL;AAsDS;AAAA,MACL,GAAI,kBAAkB,EAAE,SAAS,UAAU,cAAc,IAAI,IAAI,EAAE;AAAA,MACnE,QAAQ;AAAA,MACR,eAAe,+CAAe;AAAA,MAC9B,aACE,8CAAY,SAAZ,YAAoB,UAAU,KAAK,mBAAmB,MAAM,KAAK;AAAA,IACrE;AAAA;AAAA,EACA,OAAO,CAAC;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAG;AAnEL;AAmES;AAAA,MACL,GAAI,kBAAkB,EAAE,SAAS,EAAE;AAAA,MACnC,QAAQ;AAAA,MACR,eAAe,+CAAe;AAAA,MAC9B,aACE,8CAAY,UAAZ,YAAqB,UAAU,MAAM,mBAAmB,OAAO,KAAK;AAAA,IACxE;AAAA;AACF;AAQO,IAAM,WAAW;AAAA,EACtB,CAAC,OAAO,QAAQ;AACd,UAAM;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA,MACA,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AAEJ,UAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,cAAU,MAAM;AACd,YAAM,UAAU,WAAW,MAAM;AAC/B,mBAAW,IAAI;AAAA,MACjB,CAAC;AACD,aAAO,MAAM,aAAa,OAAO;AAAA,IACnC,GAAG,CAAC,CAAC;AAQL,SAAK;AAAA,MACH,WAAW,OAAO,cAAc,IAAI,KAAK,CAAC,CAAC;AAAA,MAC3C,SAAS;AAAA,IACX,CAAC;AAED,UAAM,oBAAoB,WAAW,eAAe,SAAS,CAAC,IAAI;AAElE,UAAM,SAAS;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI;AAAA,MACpD,eAAe;AAAA,QACb,OAAO,+CAAe;AAAA,QACtB,MAAM,gBACF,+CAAe,OACf;AAAA,UACE,GAAG,+CAAe;AAAA,UAClB,SAAS,oBAAoB,UAAU;AAAA,QACzC;AAAA,MACN;AAAA,IACF;AAEA,UAAM,OAAO,gBAAgB,SAAS;AACtC,UAAM,UAAU,UAAU,gBAAgB,UAAU;AAEpD,WACE,oBAAC,mBAAgB,SAAS,OAAO,QAC9B,kBACC;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QACC;AAAA,QACC,GAAG;AAAA,QACJ,WAAW,GAAG,mBAAmB,SAAS;AAAA,QAC1C,OAAO;AAAA,UACL,UAAU;AAAA,UACV,SAAS;AAAA,UACT,GAAG;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,gBAAgB,SAAS;AAAA,QAClC;AAAA,QACA,MAAK;AAAA;AAAA,IACP,GAEJ;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc;","names":[]}