UNPKG

@nex-ui/react

Version:

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

83 lines (79 loc) • 2.31 kB
"use client"; 'use strict'; var jsxRuntime = require('react/jsx-runtime'); var styled = require('@nex-ui/styled'); var utils = require('@nex-ui/utils'); var Context = require('../provider/Context.cjs'); var useDefaultProps = require('../utils/useDefaultProps.cjs'); var useStyles = require('../utils/useStyles.cjs'); var useSlotProps = require('../utils/useSlotProps.cjs'); var composeClasses = require('../utils/composeClasses.cjs'); var icon = require('../../theme/recipes/icon.cjs'); var getUtilityClass = require('../utils/getUtilityClass.cjs'); const useSlotClasses = (ownerState)=>{ const { prefix } = Context.useNexUI(); const iconRoot = `${prefix}-icon`; const { spin, size } = ownerState; const slots = { root: [ 'root', spin && `spin`, size && `size-${size}` ] }; const composedClasses = composeClasses.composeClasses(slots, getUtilityClass.getUtilityClass(iconRoot)); return composedClasses; }; const useAriaProps = ()=>{ return { 'aria-hidden': true, focusable: false }; }; const Icon = (inProps)=>{ const props = useDefaultProps.useDefaultProps({ name: 'Icon', props: inProps }); const { as, ref, color, spin = false, size = 'md', width = '1em', height = '1em', ...remainingProps } = props; if (utils.__DEV__ && !as) { console.warn('[Nex UI] Icon: Please pass the "as" property.'); } const ownerState = { ...props, color, as, spin, size, width, height }; const ariaProps = useAriaProps(); const styles = useStyles.useStyles({ ownerState, name: 'Icon', recipe: icon.iconRecipe }); const classes = useSlotClasses(ownerState); const rootIcon = useSlotProps.useSlotProps({ ownerState, externalForwardedProps: remainingProps, sx: styles, classNames: classes.root, additionalProps: { ref, as, ...ariaProps, sx: { color, width, height } } }); return /*#__PURE__*/ jsxRuntime.jsx(styled.nex.span, { ...rootIcon }); }; Icon.displayName = 'Icon'; exports.Icon = Icon;