"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = resolveProps; var _clsx = _interopRequireDefault(require("clsx")); /** * Add keys, values of `defaultProps` that does not exist in `props` * @param defaultProps * @param props * @param mergeClassNameAndStyle If `true`, merges `className` and `style` props instead of overriding them. * When `false` (default), props override defaultProps. When `true`, `className` values are concatenated * and `style` objects are merged with props taking precedence. * @returns resolved props */ function resolveProps(defaultProps, props, mergeClassNameAndStyle = false) { const output = { ...props }; for (const key in defaultProps) { if (Object.prototype.hasOwnProperty.call(defaultProps, key)) { const propName = key; if (propName === 'components' || propName === 'slots') { output[propName] = { ...defaultProps[propName], ...output[propName] }; } else if (propName === 'componentsProps' || propName === 'slotProps') { const defaultSlotProps = defaultProps[propName]; const slotProps = props[propName]; if (!slotProps) { output[propName] = defaultSlotProps || {}; } else if (!defaultSlotProps) { output[propName] = slotProps; } else { output[propName] = { ...slotProps }; for (const slotKey in defaultSlotProps) { if (Object.prototype.hasOwnProperty.call(defaultSlotProps, slotKey)) { const slotPropName = slotKey; output[propName][slotPropName] = resolveProps(defaultSlotProps[slotPropName], slotProps[slotPropName], mergeClassNameAndStyle); } } } } else if (propName === 'className' && mergeClassNameAndStyle && props.className) { output.className = (0, _clsx.default)(defaultProps?.className, props?.className); } else if (propName === 'style' && mergeClassNameAndStyle && props.style) { output.style = { ...defaultProps?.style, ...props?.style }; } else if (output[propName] === undefined) { output[propName] = defaultProps[propName]; } } } return output; }