61 lines
No EOL
2.3 KiB
JavaScript
61 lines
No EOL
2.3 KiB
JavaScript
"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;
|
|
} |