UNPKG

@mui/x-tree-view

Version:

The community edition of the MUI X Tree View components.

90 lines (89 loc) 3.22 kB
'use client'; import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; const _excluded = ["ownerState"]; import * as React from 'react'; import PropTypes from 'prop-types'; import resolveComponentProps from '@mui/utils/resolveComponentProps'; import useSlotProps from '@mui/utils/useSlotProps'; import { useTreeViewStyleContext } from "../internals/TreeViewProvider/TreeViewStyleContext.js"; import { TreeViewCollapseIcon, TreeViewExpandIcon } from "../icons/index.js"; import { jsx as _jsx } from "react/jsx-runtime"; function pickIcon(treeItemIcon, treeViewIcon, fallback) { if (treeItemIcon !== undefined) { return treeItemIcon; } if (treeViewIcon !== undefined) { return treeViewIcon; } return fallback; } function TreeItemIcon(props) { const { slots: slotsFromTreeItem, slotProps: slotPropsFromTreeItem, status } = props; const { slots: slotsFromTreeView, slotProps: slotPropsFromTreeView } = useTreeViewStyleContext(); const slots = { collapseIcon: pickIcon(slotsFromTreeItem?.collapseIcon, slotsFromTreeView.collapseIcon, TreeViewCollapseIcon), expandIcon: pickIcon(slotsFromTreeItem?.expandIcon, slotsFromTreeView.expandIcon, TreeViewExpandIcon), endIcon: pickIcon(slotsFromTreeItem?.endIcon, slotsFromTreeView.endIcon), icon: slotsFromTreeItem?.icon }; let iconName; if (slots?.icon) { iconName = 'icon'; } else if (status.expandable) { if (status.expanded) { iconName = 'collapseIcon'; } else { iconName = 'expandIcon'; } } else { iconName = 'endIcon'; } const Icon = slots[iconName]; const _useSlotProps = useSlotProps({ elementType: Icon, externalSlotProps: tempOwnerState => _extends({}, resolveComponentProps(slotPropsFromTreeView[iconName], tempOwnerState), resolveComponentProps(slotPropsFromTreeItem?.[iconName], tempOwnerState)), // TODO: Add proper ownerState ownerState: {} }), iconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded); if (!Icon) { return null; } return /*#__PURE__*/_jsx(Icon, _extends({}, iconProps)); } process.env.NODE_ENV !== "production" ? TreeItemIcon.propTypes = { // ----------------------------- Warning -------------------------------- // | These PropTypes are generated from the TypeScript type definitions | // | To update them edit the TypeScript types and run "pnpm proptypes" | // ---------------------------------------------------------------------- /** * The props used for each component slot. * @default {} */ slotProps: PropTypes.object, /** * Overridable component slots. * @default {} */ slots: PropTypes.object, status: PropTypes.shape({ disabled: PropTypes.bool.isRequired, editable: PropTypes.bool.isRequired, editing: PropTypes.bool.isRequired, error: PropTypes.bool.isRequired, expandable: PropTypes.bool.isRequired, expanded: PropTypes.bool.isRequired, focused: PropTypes.bool.isRequired, loading: PropTypes.bool.isRequired, selected: PropTypes.bool.isRequired }).isRequired } : void 0; export { TreeItemIcon };