@ant-design/x
Version:
Craft AI-driven interfaces effortlessly
115 lines (110 loc) • 4.43 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.ThoughtChainContext = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _icons = require("@ant-design/icons");
var _motion = _interopRequireDefault(require("@rc-component/motion"));
var _pickAttrs = _interopRequireDefault(require("@rc-component/util/lib/pickAttrs"));
var _clsx = require("clsx");
var _react = _interopRequireDefault(require("react"));
var _xProvider = require("../x-provider");
var _Status = _interopRequireDefault(require("./Status"));
// ================= ThoughtChainContext ====================
const ThoughtChainContext = exports.ThoughtChainContext = /*#__PURE__*/_react.default.createContext(null);
const ThoughtChainNode = props => {
// ================= info ====================
const id = _react.default.useId();
const {
info = {},
line,
index,
className,
...restProps
} = props;
const domProps = (0, _pickAttrs.default)(restProps, {
attr: true,
aria: true,
data: true
});
const {
prefixCls,
expandedKeys,
collapseMotion,
onItemExpand,
classNames = {},
styles = {}
} = _react.default.useContext(ThoughtChainContext) || {};
const {
direction
} = (0, _xProvider.useXProviderContext)();
const {
collapsible,
key = id,
icon,
blink,
title,
content,
footer,
status,
description
} = info;
// ============================ Style ============================
const nodeCls = `${prefixCls}-node`;
// ============================ Content Open ============================
const contentOpen = expandedKeys?.includes(key) ?? false;
let iconNode = /*#__PURE__*/_react.default.createElement("div", {
className: (0, _clsx.clsx)(`${nodeCls}-index-icon`)
}, index + 1);
iconNode = icon === false ? null : icon || iconNode;
// ============================ Render ============================
return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, domProps, {
className: (0, _clsx.clsx)(nodeCls, className, classNames.item),
style: props.style
}), iconNode && /*#__PURE__*/_react.default.createElement(_Status.default, {
className: (0, _clsx.clsx)(`${nodeCls}-icon`, classNames.itemIcon, {
[`${nodeCls}-icon-${line}`]: typeof line !== 'boolean'
}),
style: styles.itemIcon,
prefixCls: prefixCls,
icon: iconNode,
status: status
}), /*#__PURE__*/_react.default.createElement("div", {
className: (0, _clsx.clsx)(`${nodeCls}-box`)
}, /*#__PURE__*/_react.default.createElement("div", {
className: (0, _clsx.clsx)(`${nodeCls}-header`, classNames.itemHeader),
style: styles.itemHeader
}, /*#__PURE__*/_react.default.createElement("div", {
className: (0, _clsx.clsx)(`${nodeCls}-title`, {
[`${nodeCls}-collapsible`]: collapsible,
[`${prefixCls}-motion-blink`]: blink
}),
onClick: collapsible ? () => onItemExpand?.(key) : undefined
}, title, collapsible && content && (direction === 'rtl' ? /*#__PURE__*/_react.default.createElement(_icons.LeftOutlined, {
className: `${nodeCls}-collapse-icon`,
rotate: contentOpen ? -90 : 0
}) : /*#__PURE__*/_react.default.createElement(_icons.RightOutlined, {
className: `${nodeCls}-collapse-icon`,
rotate: contentOpen ? 90 : 0
}))), description && /*#__PURE__*/_react.default.createElement("div", {
className: `${nodeCls}-description`
}, description)), content && /*#__PURE__*/_react.default.createElement(_motion.default, (0, _extends2.default)({}, collapseMotion, {
visible: collapsible ? contentOpen : true
}), ({
className: motionClassName,
style
}, motionRef) => /*#__PURE__*/_react.default.createElement("div", {
className: (0, _clsx.clsx)(`${nodeCls}-content`, motionClassName),
ref: motionRef,
style: style
}, /*#__PURE__*/_react.default.createElement("div", {
className: (0, _clsx.clsx)(`${nodeCls}-content-box`, classNames.itemContent),
style: styles.itemContent
}, content))), footer && /*#__PURE__*/_react.default.createElement("div", {
className: (0, _clsx.clsx)(`${nodeCls}-footer`, classNames.itemFooter),
style: styles.itemFooter
}, footer)));
};
var _default = exports.default = ThoughtChainNode;