UNPKG

design-react-kit

Version:

Componenti React per Bootstrap 5

1 lines 9.13 kB
{"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"]}