{"version":3,"sources":["../../src/Accordion/AccordionBody.tsx","../../src/transitions.ts","../../src/utils.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React, { ElementType, PropsWithChildren, useCallback, useRef, useState } from 'react';\nimport { Transition } from 'react-transition-group';\nimport type { TransitionProps } from 'react-transition-group/Transition';\nimport { TransitionTimeouts, TransitionsKeys } from '../transitions';\nimport { omit, pick } from '../utils';\n\nexport type AccordionBodyProps = Partial<TransitionProps> & {\n  tag?: ElementType;\n  className?: string;\n  listClassName?: string;\n  active?: boolean;\n  onToggle?: () => void;\n};\n\n// hardcode these entries to avoid leaks\nconst transitionStatusToClassHash: Record<string, string> = {\n  entering: 'collapsing',\n  entered: 'collapse show',\n  exiting: 'collapsing',\n  exited: 'collapse'\n};\n\nfunction getTransitionClass(status: string) {\n  return transitionStatusToClassHash[status] || 'collapse';\n}\n\nfunction getHeight(node: HTMLElement) {\n  return node.scrollHeight;\n}\n\nexport const AccordionBody = ({\n  className,\n  listClassName,\n  tag = 'div',\n  active = false,\n  children,\n  timeout = TransitionTimeouts.Collapse,\n  ...attributes\n}: PropsWithChildren<AccordionBodyProps>) => {\n  const [height, setHeight] = useState<null | number>(null);\n  const nodeRef = useRef<HTMLElement>(null);\n  const onEntering = useCallback(\n    (isAppearing: boolean) => {\n      if (nodeRef.current) {\n        setHeight(getHeight(nodeRef.current));\n        attributes.onEntering?.(nodeRef.current, isAppearing);\n      }\n    },\n    [attributes.onEntering]\n  );\n  const onEntered = useCallback(\n    (isAppearing: boolean) => {\n      setHeight(null);\n      if (nodeRef.current) {\n        attributes.onEntered?.(nodeRef.current, isAppearing);\n      }\n    },\n    [attributes.onEntered]\n  );\n  const onExit = useCallback(\n    () => {\n      if (nodeRef.current) {\n        setHeight(getHeight(nodeRef.current));\n        attributes.onExit?.(nodeRef.current);\n      }\n    },\n    [attributes.onExit]\n  );\n  const onExiting = useCallback(\n    () => {\n      if (nodeRef.current) {\n        // getting this variable triggers a reflow\n        // @ts-expect-error variabile non usata\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const _unused = nodeRef.current.offsetHeight;\n        setHeight(0);\n        attributes.onExiting?.(nodeRef.current);\n      }\n    },\n    [attributes.onExiting]\n  );\n  const onExited = useCallback(\n    () => {\n      setHeight(null);\n      if (nodeRef.current) {\n        attributes.onExited?.(nodeRef.current);\n      }\n    },\n    [attributes.onExited]\n  );\n  const Tag = tag;\n\n  const transitionProps = pick(attributes, TransitionsKeys);\n  const childProps = omit(attributes, TransitionsKeys);\n\n  return (\n    <Transition\n      nodeRef={nodeRef}\n      timeout={timeout}\n      in={active}\n      onEntering={onEntering}\n      onEntered={onEntered}\n      onExit={onExit}\n      onExiting={onExiting}\n      onExited={onExited}\n      {...transitionProps}\n    >\n      {(status) => {\n        const transitionClass = getTransitionClass(status);\n        const classes = classNames(className, transitionClass);\n        const listClasses = classNames(listClassName, 'accordion-body');\n        const style = height == null ? null : { height };\n\n        return (\n          <Tag className={classes} ref={nodeRef} style={{ ...childProps.style, ...style }} {...childProps}>\n            <div className={listClasses}>{children}</div>\n          </Tag>\n        );\n      }}\n    </Transition>\n  );\n};\n","// Taken from Reactstrap utils.js which are tken from bootstrap sass\nexport const TransitionTimeouts = {\n  // $transition-fade\n  Fade: 150,\n  // $transition-collapse\n  Collapse: 350,\n  // $modal-transition\n  Modal: 300,\n  // $carousel-transition\n  Carousel: 600\n};\n\n// taken from Reactstrap utils.js\nexport const TransitionsKeys = [\n  'in',\n  'mountOnEnter',\n  'unmountOnExit',\n  'appear',\n  'enter',\n  'exit',\n  'timeout',\n  'onEnter',\n  'onEntering',\n  'onEntered',\n  'onExit',\n  'onExiting',\n  'onExited'\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst transitionStatus = {\n  entering: 1,\n  entered: 1,\n  exiting: 1,\n  exited: 1\n};\n\nexport type TransitionStates = keyof typeof transitionStatus;\n","export const noop = () => {};\n\nexport const logError = (message: string) => {\n  if (typeof console !== 'undefined') {\n    if (console.error) {\n      console.error(message);\n    } else {\n      console.log(message);\n    }\n  }\n};\n\n// @internal Used for testing purposes only\nexport const flushMessageCache = () => {\n  for (const key in messages) {\n    delete messages[key];\n  }\n};\n\nconst messages: Record<string, 1> = {};\nexport const notifyDeprecation = (message: string, options: { once: boolean } = { once: true }) => {\n  if (!options.once) {\n    logError(message);\n  } else {\n    if (!messages[message]) {\n      logError(message);\n      messages[message] = 1;\n    }\n  }\n};\n\nexport function mapToCssModules(className: string | null, cssModules?: Record<string, string>) {\n  const finalClassNames = className == null ? '' : className;\n  if (!cssModules) {\n    return finalClassNames;\n  }\n  return finalClassNames\n    .split(' ')\n    .map((klass) => cssModules[klass] ?? klass)\n    .join(' ');\n}\n\ntype UnknownObject = Record<string, unknown>;\n\nexport function pick<T extends UnknownObject>(obj: T, keys: keyof T | Array<keyof T>): Partial<T> {\n  const keysArray = Array.isArray(keys) ? keys : [keys];\n  const newObj: Partial<T> = {};\n  for (const key of keysArray) {\n    if (key in obj) {\n      newObj[key] = obj[key];\n    }\n  }\n  return newObj;\n}\n\nexport function omit<T extends UnknownObject>(obj: T, keys: keyof T | Array<keyof T>): Partial<T> {\n  const keysLookup = new Set(Array.isArray(keys) ? keys : [keys]);\n\n  const newObj: Partial<T> = {};\n  for (const key in obj) {\n    if (!keysLookup.has(key)) {\n      newObj[key] = obj[key];\n    }\n  }\n  return newObj;\n}\n"],"mappings":"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","names":["AccordionBody_exports","__export","AccordionBody","__toCommonJS","import_classnames","import_react","import_react_transition_group","TransitionTimeouts","TransitionsKeys","pick","obj","keys","keysArray","newObj","key","omit","keysLookup","transitionStatusToClassHash","getTransitionClass","status","getHeight","node","AccordionBody","className","listClassName","tag","active","children","timeout","TransitionTimeouts","attributes","height","setHeight","nodeRef","onEntering","isAppearing","onEntered","onExit","onExiting","_unused","onExited","Tag","transitionProps","pick","TransitionsKeys","childProps","omit","React","transitionClass","classes","classNames","listClasses","style"]}