UNPKG

@nex-ui/react

Version:

🎉 A beautiful, modern, and reliable React component library.

69 lines (63 loc) • 2.11 kB
'use strict'; 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;