@nex-ui/react
Version:
🎉 A beautiful, modern, and reliable React component library.
69 lines (63 loc) • 2.11 kB
JavaScript
;
var clsx = require('clsx');
var utils = require('@nex-ui/utils');
var react = require('react');
var styled = require('@nex-ui/styled');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var clsx__default = /*#__PURE__*/_interopDefault(clsx);
const resolve = (sx, ownerState)=>{
const css = sx(ownerState);
return utils.isArray(css) ? css : [
css
];
};
const useSlot = (args)=>{
const { a11y, style, ownerState, elementType, classNames, externalSlotProps, additionalProps, externalForwardedProps, shouldForwardComponent = true } = args;
const getProps = ()=>{
const props = utils.mergeProps(additionalProps, externalForwardedProps, externalSlotProps, a11y);
const ref = utils.mergeRefs(additionalProps?.ref, externalForwardedProps?.ref, externalSlotProps?.ref);
const className = clsx__default.default(classNames, props?.className);
let mergedSx = style;
if (utils.isFunction(props.sx)) {
mergedSx = [
style,
...resolve(props.sx, ownerState)
];
} else if (utils.isArray(props.sx)) {
mergedSx = props.sx.reduce((acc, v)=>{
if (utils.isFunction(v)) {
return [
...acc,
...resolve(v, ownerState)
];
}
return [
...acc,
v
];
}, [
style
]);
} else if (utils.isPlainObject(props.sx)) {
mergedSx = [
style,
props.sx
];
}
return {
...props,
ref,
className,
sx: mergedSx
};
};
const Component = react.useMemo(()=>shouldForwardComponent ? styled.nex[elementType] ?? styled.nex(elementType) : elementType, [
elementType,
shouldForwardComponent
]);
return [
Component,
getProps
];
};
exports.useSlot = useSlot;