{"version":3,"file":"Collapse.cjs","sources":["../../../src/components/Collapse/Collapse.tsx"],"sourcesContent":["import { useReducedMotion } from '@raikou/hooks';\nimport {\n  Box,\n  BoxProps,\n  Factory,\n  factory,\n  getStyleObject,\n  useProps,\n  useRaikouTheme,\n} from '../../core';\nimport { useCollapse } from './use-collapse';\n\nexport interface CollapseProps\n  extends BoxProps,\n    Omit<React.ComponentPropsWithoutRef<'div'>, keyof BoxProps> {\n  /** Opened state */\n  in: boolean;\n\n  /** Called each time transition ends */\n  onTransitionEnd?: () => void;\n\n  /** Transition duration in ms, `200` by default */\n  transitionDuration?: number;\n\n  /** Transition timing function, default value is `ease` */\n  transitionTimingFunction?: string;\n\n  /** Determines whether opacity should be animated, `true` by default */\n  animateOpacity?: boolean;\n}\n\nexport type CollapseFactory = Factory<{\n  props: CollapseProps;\n  ref: HTMLDivElement;\n}>;\n\nconst defaultProps: Partial<CollapseProps> = {\n  transitionDuration: 200,\n  transitionTimingFunction: 'ease',\n  animateOpacity: true,\n};\n\nexport const Collapse = factory<CollapseFactory>((props, ref) => {\n  const {\n    children,\n    in: opened,\n    transitionDuration,\n    transitionTimingFunction,\n    style,\n    onTransitionEnd,\n    animateOpacity,\n    ...others\n  } = useProps('Collapse', defaultProps, props);\n\n  const theme = useRaikouTheme();\n  const shouldReduceMotion = useReducedMotion();\n  const reduceMotion = theme.respectReducedMotion ? shouldReduceMotion : false;\n  const duration = reduceMotion ? 0 : transitionDuration;\n\n  const getCollapseProps = useCollapse({\n    opened,\n    transitionDuration: duration,\n    transitionTimingFunction,\n    onTransitionEnd,\n  });\n\n  if (duration === 0) {\n    return opened ? <Box {...others}>{children}</Box> : null;\n  }\n\n  return (\n    <Box\n      {...getCollapseProps({\n        style: {\n          opacity: opened || !animateOpacity ? 1 : 0,\n          transition: animateOpacity ? `opacity ${duration}ms ${transitionTimingFunction}` : 'none',\n          ...getStyleObject(style, theme),\n        },\n        ref,\n        ...others,\n      })}\n    >\n      {children}\n    </Box>\n  );\n});\n\nCollapse.displayName = '@raikou/core/Collapse';\n"],"names":["factory","useProps","useRaikouTheme","useReducedMotion","useCollapse","jsx","Box","getStyleObject"],"mappings":";;;;;;;;;;;;;;AAoCA,MAAM,YAAuC,GAAA;AAAA,EAC3C,kBAAoB,EAAA,GAAA;AAAA,EACpB,wBAA0B,EAAA,MAAA;AAAA,EAC1B,cAAgB,EAAA;AAClB,CAAA;AAEO,MAAM,QAAW,GAAAA,eAAA,CAAyB,CAAC,KAAA,EAAO,GAAQ,KAAA;AAC/D,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,EAAI,EAAA,MAAA;AAAA,IACJ,kBAAA;AAAA,IACA,wBAAA;AAAA,IACA,KAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA,GAAG;AAAA,GACD,GAAAC,iBAAA,CAAS,UAAY,EAAA,YAAA,EAAc,KAAK,CAAA;AAE5C,EAAA,MAAM,QAAQC,6BAAe,EAAA;AAC7B,EAAA,MAAM,qBAAqBC,sBAAiB,EAAA;AAC5C,EAAM,MAAA,YAAA,GAAe,KAAM,CAAA,oBAAA,GAAuB,kBAAqB,GAAA,KAAA;AACvE,EAAM,MAAA,QAAA,GAAW,eAAe,CAAI,GAAA,kBAAA;AAEpC,EAAA,MAAM,mBAAmBC,uBAAY,CAAA;AAAA,IACnC,MAAA;AAAA,IACA,kBAAoB,EAAA,QAAA;AAAA,IACpB,wBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,IAAI,aAAa,CAAG,EAAA;AAClB,IAAA,OAAO,yBAAUC,cAAA,CAAAC,OAAA,EAAA,EAAK,GAAG,MAAA,EAAS,UAAS,CAAS,GAAA,IAAA;AAAA;AAGtD,EACE,uBAAAD,cAAA;AAAA,IAACC,OAAA;AAAA,IAAA;AAAA,MACE,GAAG,gBAAiB,CAAA;AAAA,QACnB,KAAO,EAAA;AAAA,UACL,OAAS,EAAA,MAAA,IAAU,CAAC,cAAA,GAAiB,CAAI,GAAA,CAAA;AAAA,UACzC,YAAY,cAAiB,GAAA,CAAA,QAAA,EAAW,QAAQ,CAAA,GAAA,EAAM,wBAAwB,CAAK,CAAA,GAAA,MAAA;AAAA,UACnF,GAAGC,6BAAe,CAAA,KAAA,EAAO,KAAK;AAAA,SAChC;AAAA,QACA,GAAA;AAAA,QACA,GAAG;AAAA,OACJ,CAAA;AAAA,MAEA;AAAA;AAAA,GACH;AAEJ,CAAC;AAED,QAAA,CAAS,WAAc,GAAA,uBAAA;;;;"}