UNPKG

design-react-kit

Version:

Componenti React per Bootstrap 5

1 lines 8.69 kB
{"version":3,"sources":["../../src/Accordion/AccordionBody.tsx","../../src/transitions.ts","../../src/utils.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React, { ElementType, PropsWithChildren, useCallback, 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\n const onEntering = useCallback(\n (node: HTMLElement, isAppearing: boolean) => {\n setHeight(getHeight(node));\n attributes.onEntering?.(node, isAppearing);\n },\n [attributes.onEntering]\n );\n const onEntered = useCallback(\n (node: HTMLElement, isAppearing: boolean) => {\n setHeight(null);\n attributes.onEntered?.(node, isAppearing);\n },\n [attributes.onEntered]\n );\n const onExit = useCallback(\n (node: HTMLElement) => {\n setHeight(getHeight(node));\n attributes.onExit?.(node);\n },\n [attributes.onExit]\n );\n const onExiting = useCallback(\n (node: HTMLElement) => {\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 = node.offsetHeight;\n setHeight(0);\n attributes.onExiting?.(node);\n },\n [attributes.onExiting]\n );\n const onExited = useCallback(\n (node: HTMLElement) => {\n setHeight(null);\n attributes.onExited?.(node);\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 {...transitionProps}\n timeout={timeout}\n in={active}\n onEntering={onEntering}\n onEntered={onEntered}\n onExit={onExit}\n onExiting={onExiting}\n onExited={onExited}\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} style={{ ...childProps.style, ...style }} {...childProps}>\n <div className={listClasses}>{children}</div>\n </Tag>\n );\n }}\n </Transition>\n );\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","onEntering","isAppearing","onEntered","onExit","onExiting","_unused","onExited","Tag","transitionProps","pick","TransitionsKeys","childProps","omit","React","transitionClass","classes","classNames","listClasses","style"]}