react-public-components 1.1.10 → 1.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -16
- package/dist/index.cjs +22 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -6
- package/dist/index.d.ts +15 -6
- package/dist/index.js +22 -12
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -80,27 +80,30 @@ import { Splitter } from 'react-public-components';
|
|
|
80
80
|
|
|
81
81
|
### Splitter Props
|
|
82
82
|
|
|
83
|
-
| 属性 | 类型
|
|
84
|
-
| ---------------------- |
|
|
85
|
-
| `children` | `ReactNode
|
|
86
|
-
| `className` | `string`
|
|
87
|
-
| `
|
|
88
|
-
| `
|
|
89
|
-
| `
|
|
90
|
-
| `
|
|
91
|
-
| `
|
|
92
|
-
| `
|
|
93
|
-
| `
|
|
94
|
-
| `
|
|
95
|
-
| `
|
|
96
|
-
| `
|
|
97
|
-
| `
|
|
83
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
84
|
+
| ---------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------- | ------------------------------------------------------------------------------------- |
|
|
85
|
+
| `children` | `ReactNode`(建议传入 `Splitter.Panel`) | - | 面板集合,建议 2 个及以上 |
|
|
86
|
+
| `className` | `string` | - | 根节点自定义类名 |
|
|
87
|
+
| `classNames` | `Partial<Record<SemanticDOM, string>> \| ((info: { props }) => Partial<Record<SemanticDOM, string>>)` | - | 自定义组件内部各语义化结构(`root` / `panel` / `dragger`)的类名,支持对象或函数 |
|
|
88
|
+
| `style` | `CSSProperties` | - | 根节点自定义 CSS 样式 |
|
|
89
|
+
| `styles` | `Partial<Record<SemanticDOM, CSSProperties>> \| ((info: { props }) => Partial<Record<SemanticDOM, CSSProperties>>)` | - | 自定义组件内部各语义化结构(`root` / `panel` / `dragger`)的 CSS 样式,支持对象或函数 |
|
|
90
|
+
| `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | 分屏方向(优先级高于 `vertical`) |
|
|
91
|
+
| `vertical` | `boolean` | `false` | 是否垂直分屏(兼容写法) |
|
|
92
|
+
| `lazy` | `boolean` | `false` | 是否在拖拽结束时才更新视图(提升性能) |
|
|
93
|
+
| `onResizeStart` | `(sizes: number[]) => void` | - | 拖拽开始回调 |
|
|
94
|
+
| `onResize` | `(sizes: number[]) => void` | - | 拖拽过程中尺寸变化回调 |
|
|
95
|
+
| `onResizeEnd` | `(sizes: number[]) => void` | - | 拖拽/折叠/重置结束回调 |
|
|
96
|
+
| `onCollapse` | `(collapsed: boolean[], sizes: number[]) => void` | - | 面板展开或折叠状态发生变化时的回调 |
|
|
97
|
+
| `onDraggerDoubleClick` | `(index: number) => void` | - | 双击拖拽条回调 |
|
|
98
|
+
| `draggerIcon` | `ReactNode` | - | 自定义拖拽手柄指示图标节点 |
|
|
99
|
+
| `destroyOnHidden` | `boolean` | `false` | 折叠/隐藏时是否销毁所有面板内容节点 |
|
|
98
100
|
|
|
99
101
|
### Splitter.Panel Props
|
|
100
102
|
|
|
101
103
|
| 属性 | 类型 | 默认值 | 说明 |
|
|
102
104
|
| ----------------- | ---------------------------------------------------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------- |
|
|
103
105
|
| `children` | `ReactNode` | - | 面板内容 |
|
|
106
|
+
| `className` | `string` | - | 面板自定义类名 |
|
|
104
107
|
| `size` | `number \| '${number}%'` | - | 受控尺寸 |
|
|
105
108
|
| `defaultSize` | `number \| '${number}%'` | - | 初始尺寸(未设置时按剩余空间平均分配) |
|
|
106
109
|
| `min` | `number \| '${number}%'` | `0` | 最小尺寸 |
|
|
@@ -153,7 +156,7 @@ export default function Demo() {
|
|
|
153
156
|
### 依赖说明
|
|
154
157
|
|
|
155
158
|
- `react`(含 hooks、Children API)
|
|
156
|
-
-
|
|
159
|
+
- 零第三方 UI 库依赖(内部采用原生内联 SVG 图标组件)
|
|
157
160
|
|
|
158
161
|
---
|
|
159
162
|
|
package/dist/index.cjs
CHANGED
|
@@ -249,24 +249,25 @@ var parseSize = (value, total, fallback) => {
|
|
|
249
249
|
var roundSizes = (sizes) => sizes.map((size) => Math.round(size));
|
|
250
250
|
var getPointerPosition = (event, orientation) => orientation === "horizontal" ? event.clientX : event.clientY;
|
|
251
251
|
var clamp = (value, min, max) => Math.min(Math.max(value, min), max);
|
|
252
|
-
var resolveSemanticStyles = (
|
|
253
|
-
if (!
|
|
252
|
+
var resolveSemanticStyles = (styles, infoProps) => {
|
|
253
|
+
if (!styles) {
|
|
254
254
|
return {};
|
|
255
255
|
}
|
|
256
|
-
const resolved = typeof
|
|
257
|
-
|
|
256
|
+
const resolved = typeof styles === "function" ? styles({ props: infoProps }) : styles;
|
|
257
|
+
return resolved || {};
|
|
258
|
+
};
|
|
259
|
+
var resolveSemanticClassNames = (classNames, infoProps) => {
|
|
260
|
+
if (!classNames) {
|
|
258
261
|
return {};
|
|
259
262
|
}
|
|
260
|
-
const
|
|
261
|
-
|
|
262
|
-
return resolved;
|
|
263
|
-
}
|
|
264
|
-
return { root: resolved };
|
|
263
|
+
const resolved = typeof classNames === "function" ? classNames({ props: infoProps }) : classNames;
|
|
264
|
+
return resolved || {};
|
|
265
265
|
};
|
|
266
266
|
var CustomSplitter = (props) => {
|
|
267
267
|
const {
|
|
268
268
|
children,
|
|
269
269
|
className,
|
|
270
|
+
classNames,
|
|
270
271
|
destroyOnHidden = false,
|
|
271
272
|
draggerIcon,
|
|
272
273
|
draggerSize = DEFAULT_DRAGGER_SIZE,
|
|
@@ -278,6 +279,7 @@ var CustomSplitter = (props) => {
|
|
|
278
279
|
onDraggerDoubleClick,
|
|
279
280
|
orientation,
|
|
280
281
|
style,
|
|
282
|
+
styles,
|
|
281
283
|
vertical = false
|
|
282
284
|
} = props;
|
|
283
285
|
const resolvedOrientation = orientation != null ? orientation : vertical ? "vertical" : "horizontal";
|
|
@@ -288,7 +290,11 @@ var CustomSplitter = (props) => {
|
|
|
288
290
|
const [hoveredIndex, setHoveredIndex] = (0, import_react2.useState)(null);
|
|
289
291
|
const [hoveredCollapsePanelIndex, setHoveredCollapsePanelIndex] = (0, import_react2.useState)(null);
|
|
290
292
|
const [sizes, setSizes] = (0, import_react2.useState)([]);
|
|
291
|
-
const semanticStyles = (0, import_react2.useMemo)(() => resolveSemanticStyles(
|
|
293
|
+
const semanticStyles = (0, import_react2.useMemo)(() => resolveSemanticStyles(styles, props), [styles, props]);
|
|
294
|
+
const semanticClassNames = (0, import_react2.useMemo)(
|
|
295
|
+
() => resolveSemanticClassNames(classNames, props),
|
|
296
|
+
[classNames, props]
|
|
297
|
+
);
|
|
292
298
|
const panels = (0, import_react2.useMemo)(
|
|
293
299
|
() => import_react2.default.Children.toArray(children).filter(
|
|
294
300
|
import_react2.default.isValidElement
|
|
@@ -492,7 +498,8 @@ var CustomSplitter = (props) => {
|
|
|
492
498
|
overflow: "hidden",
|
|
493
499
|
position: "relative",
|
|
494
500
|
width: "100%",
|
|
495
|
-
...semanticStyles.root
|
|
501
|
+
...semanticStyles.root,
|
|
502
|
+
...style
|
|
496
503
|
};
|
|
497
504
|
const renderCollapseButton = (draggerIndex, panelIndex, direction) => {
|
|
498
505
|
var _a, _b;
|
|
@@ -560,7 +567,8 @@ var CustomSplitter = (props) => {
|
|
|
560
567
|
}
|
|
561
568
|
);
|
|
562
569
|
};
|
|
563
|
-
|
|
570
|
+
const rootClassName = [className, semanticClassNames.root].filter(Boolean).join(" ") || void 0;
|
|
571
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: rootClassName, ref: rootRef, style: rootStyle, children: panels.map((panel, index) => {
|
|
564
572
|
var _a, _b, _c, _d, _e;
|
|
565
573
|
const isHidden = sizes[index] <= 1;
|
|
566
574
|
const isLeftOrTopCollapsed = ((_a = sizes[index]) != null ? _a : 0) <= 1;
|
|
@@ -572,6 +580,7 @@ var CustomSplitter = (props) => {
|
|
|
572
580
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
573
581
|
"div",
|
|
574
582
|
{
|
|
583
|
+
className: [semanticClassNames.panel, panel.props.className].filter(Boolean).join(" ") || void 0,
|
|
575
584
|
style: {
|
|
576
585
|
background: index % 2 ? "#fff" : "#fafafa",
|
|
577
586
|
boxSizing: "border-box",
|
|
@@ -605,6 +614,7 @@ var CustomSplitter = (props) => {
|
|
|
605
614
|
"div",
|
|
606
615
|
{
|
|
607
616
|
"aria-orientation": resolvedOrientation,
|
|
617
|
+
className: semanticClassNames.dragger,
|
|
608
618
|
onDoubleClick: () => {
|
|
609
619
|
onDraggerDoubleClick == null ? void 0 : onDraggerDoubleClick(index);
|
|
610
620
|
resetSizes();
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../CollapseBox/index.tsx","../src/icons.tsx","../Splitter/index.tsx"],"sourcesContent":["// 统一入口\nexport { default as CollapseBox } from '../CollapseBox';\nexport type {\n\tCollapseBoxProps,\n\tCollapseBoxDirection,\n\tCollapseBoxButtonPosition,\n} from '../CollapseBox';\n\nexport { default as Splitter } from '../Splitter';\nexport type {\n\tSplitterProps,\n\tSplitterPanelProps,\n\tSplitterCollapsible,\n\tSplitterSize,\n\tSplitterOrientation,\n} from '../Splitter';\n","import { useState, type CSSProperties, type ReactNode } from 'react';\nimport { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport './index.less';\n\nexport type CollapseBoxDirection = 'horizontal' | 'vertical';\nexport type CollapseBoxButtonPosition = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface CollapseBoxProps {\n\tchildren?: ReactNode;\n\ttitle?: string;\n\tdirection?: CollapseBoxDirection;\n\tbuttonPosition?: CollapseBoxButtonPosition;\n\tdefaultWidth?: number | string;\n\tdefaultHeight?: number | string;\n\tcontentPadding?: string;\n\theaderHeight?: number;\n\tclassName?: string;\n}\n\nconst formatDimension = (value?: number | string): string | undefined => {\n\tif (value === undefined || value === null) return undefined;\n\treturn typeof value === 'number' ? `${value}px` : value;\n};\n\nconst ChevronLeft = () => <LeftOutlined />;\n\nconst ChevronRight = () => <RightOutlined />;\n\nconst ChevronUp = () => <UpOutlined />;\n\nconst ChevronDown = () => <DownOutlined />;\n\nconst CollapsibleBox = ({\n\tchildren,\n\ttitle = '内容区域',\n\tdirection = 'horizontal',\n\tbuttonPosition = 'right',\n\tdefaultWidth = 600,\n\tdefaultHeight = 300,\n\tcontentPadding = '16px',\n\theaderHeight = 16,\n\tclassName,\n}: CollapseBoxProps) => {\n\tconst [isExpanded, setIsExpanded] = useState(true);\n\n\tconst getContentMaxHeight = () => {\n\t\tif (typeof defaultHeight === 'number') {\n\t\t\treturn `${defaultHeight - headerHeight}px`;\n\t\t}\n\t\tif (typeof defaultHeight === 'string') {\n\t\t\treturn headerHeight ? `calc(${defaultHeight} - ${headerHeight}px)` : defaultHeight;\n\t\t}\n\t\treturn '100%';\n\t};\n\n\tconst getIcon = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\tif (buttonPosition === 'right') {\n\t\t\t\treturn isExpanded ? <ChevronRight /> : <ChevronLeft />;\n\t\t\t} else {\n\t\t\t\treturn isExpanded ? <ChevronLeft /> : <ChevronRight />;\n\t\t\t}\n\t\t} else {\n\t\t\tif (buttonPosition === 'bottom') {\n\t\t\t\treturn isExpanded ? <ChevronUp /> : <ChevronDown />;\n\t\t\t} else {\n\t\t\t\treturn isExpanded ? <ChevronDown /> : <ChevronUp />;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst getButtonClass = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\treturn buttonPosition === 'right' ? 'button-right' : 'button-left';\n\t\t} else {\n\t\t\treturn buttonPosition === 'bottom' ? 'button-bottom' : 'button-top';\n\t\t}\n\t};\n\n\tconst getContainerStyle = (): CSSProperties => {\n\t\tconst resolvedHeight = formatDimension(defaultHeight);\n\t\tconst resolvedWidth = formatDimension(defaultWidth);\n\t\tif (direction === 'horizontal') {\n\t\t\treturn {\n\t\t\t\twidth: isExpanded ? resolvedWidth : '0px',\n\t\t\t\theight: resolvedHeight,\n\t\t\t\tminWidth: 0,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\theight: isExpanded ? resolvedHeight : '0px',\n\t\t\t\twidth: resolvedWidth,\n\t\t\t\tminHeight: 0,\n\t\t\t};\n\t\t}\n\t};\n\n\tconst baseWrapperClass =\n\t\tdirection === 'horizontal' ? 'collapsible-wrapper horizontal' : 'collapsible-wrapper vertical';\n\tconst wrapperClass = className ? `${baseWrapperClass} ${className}` : baseWrapperClass;\n\n\tconst containerClass =\n\t\tdirection === 'horizontal' && buttonPosition === 'right'\n\t\t\t? 'collapsible-container align-right'\n\t\t\t: 'collapsible-container';\n\tconst height = getContentMaxHeight();\n\tconst contentStyle: CSSProperties = {\n\t\tmaxHeight: direction === 'vertical' ? (isExpanded ? height : '0px') : height,\n\t\toverflowY: 'auto',\n\t\tpadding: direction === 'vertical' && !isExpanded ? '0px' : contentPadding,\n\t\tboxSizing: 'border-box',\n\t};\n\n\t// 折叠时(纵向 + 底部按钮):按钮需切换为 top:0 定位,使其显示在折叠线下方\n\tconst buttonStyle: CSSProperties =\n\t\tdirection === 'vertical' && buttonPosition === 'bottom' && !isExpanded\n\t\t\t? { top: '0px', bottom: 'auto' }\n\t\t\t: {};\n\n\t// 让 wrapper 高度跟随容器,确保 bottom:0 的按钮贴住容器底部\n\t// 折叠时 wrapper 高度为 0,配合按钮的 translateY(-100%) 让按钮显示在折叠线上方\n\tconst formattedWidth = formatDimension(defaultWidth);\n\tconst formattedHeight = formatDimension(defaultHeight);\n\tconst wrapperStyle: CSSProperties | undefined =\n\t\tdirection === 'vertical'\n\t\t\t? isExpanded\n\t\t\t\t? {\n\t\t\t\t\t\theight: formattedHeight,\n\t\t\t\t\t\twidth: formattedWidth,\n\t\t\t\t\t}\n\t\t\t\t: { height: 0, width: formattedWidth }\n\t\t\t: undefined;\n\n\treturn (\n\t\t<div className={wrapperClass} style={wrapperStyle}>\n\t\t\t<div style={getContainerStyle()} className={containerClass}>\n\t\t\t\t{title && (\n\t\t\t\t\t<div className=\"collapsible-header\" style={{ display: 'none' }}>\n\t\t\t\t\t\t<h3>{title}</h3>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"collapsible-content\" style={contentStyle}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tonClick={() => setIsExpanded(!isExpanded)}\n\t\t\t\tclassName={`toggle-button ${getButtonClass()}`}\n\t\t\t\tstyle={buttonStyle}\n\t\t\t\ttitle={isExpanded ? '隐藏' : '展开'}\n\t\t\t>\n\t\t\t\t{getIcon()}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default CollapsibleBox;\n","import type { CSSProperties } from 'react';\n\ninterface IconProps {\n\tstyle?: CSSProperties;\n\tclassName?: string;\n}\n\nconst baseStyle: CSSProperties = {\n\tdisplay: 'inline-block',\n\twidth: '1em',\n\theight: '1em',\n\tverticalAlign: '-0.125em',\n};\n\nexport const LeftOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"left\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z\" />\n\t</svg>\n);\n\nexport const RightOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"right\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z\" />\n\t</svg>\n);\n\nexport const UpOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"up\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M890.5 755.3L537.4 268a31.96 31.96 0 00-50.8 0L133.5 755.3a7.95 7.95 0 006.3 12.7h75.5c4.9 0 9.6-2.3 12.6-6.1l281-360 281 360c3 3.8 7.7 6.1 12.6 6.1h75.5c6.7 0 10.4-7.6 6.1-12.7z\" />\n\t</svg>\n);\n\nexport const DownOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"down\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 37 17.6 49.8 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\" />\n\t</svg>\n);\n","import { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport type {\n\tCSSProperties,\n\tReactElement,\n\tReactNode,\n\tPointerEvent as ReactPointerEvent,\n} from 'react';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nexport type SplitterSize = number | `${number}%`;\nexport type SplitterOrientation = 'horizontal' | 'vertical';\n\nexport type SplitterCollapsible =\n\t| boolean\n\t| {\n\t\t\tstart?: boolean;\n\t\t\tend?: boolean;\n\t\t\tshowCollapsibleIcon?: boolean | 'auto';\n\t };\n\n/**\n * Splitter.Panel 子面板组件属性\n */\nexport type SplitterPanelProps = {\n\t/** 面板内容节点 */\n\tchildren?: ReactNode;\n\t/**\n\t * 折叠配置:\n\t * - `boolean`: 是否允许两端折叠\n\t * - `Object`: `{ start?: boolean; end?: boolean; showCollapsibleIcon?: boolean | 'auto' }`\n\t */\n\tcollapsible?: SplitterCollapsible;\n\t/** 面板初始默认尺寸(支持数字 px 或百分比字符串如 '40%') */\n\tdefaultSize?: SplitterSize;\n\t/** 折叠/隐藏时是否销毁面板内容节点(可覆盖 Splitter 根容器上的 destroyOnHidden 属性) */\n\tdestroyOnHidden?: boolean;\n\t/** 面板最大允许尺寸限制 */\n\tmax?: SplitterSize;\n\t/** 面板最小允许尺寸限制 */\n\tmin?: SplitterSize;\n\t/** 是否允许通过分隔条拖拽调整大小(默认 true) */\n\tresizable?: boolean;\n\t/** 面板受控尺寸 */\n\tsize?: SplitterSize;\n\t/** 面板自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n};\n\nexport type SplitterSemanticDOM = 'root' | 'panel' | 'dragger';\n/** 语义化 DOM 结构标识 */\nexport type SemanticDOM = SplitterSemanticDOM;\n\nexport type SplitterStyle =\n\t| CSSProperties\n\t| Partial<Record<SplitterSemanticDOM, CSSProperties>>\n\t| ((info: {\n\t\t\tprops: SplitterProps;\n\t }) => Partial<Record<SplitterSemanticDOM, CSSProperties>> | CSSProperties);\n\n/**\n * Splitter 根容器组件属性\n */\nexport type SplitterProps = {\n\t/** 面板集合(必须为 Splitter.Panel) */\n\tchildren: ReactNode;\n\t/** 容器根节点自定义类名 */\n\tclassName?: string;\n\t/** 折叠/隐藏时是否销毁面板内容节点(默认 false,保留组件状态) */\n\tdestroyOnHidden?: boolean;\n\t/** 拖拽分隔条的宽度/高度(单位 px,默认 4) */\n\tdraggerSize?: number;\n\t/** 是否在拖拽结束时才更新视图(默认 false) */\n\tlazy?: boolean;\n\t/** 面板展开或折叠状态改变时的回调 */\n\tonCollapse?: (collapsed: boolean[], sizes: number[]) => void;\n\t/** 拖拽过程中的实时尺寸变化回调 */\n\tonResize?: (sizes: number[]) => void;\n\t/** 拖拽结束、重置尺寸或折叠完成时的回调 */\n\tonResizeEnd?: (sizes: number[]) => void;\n\t/** 开始拖拽分隔条时的回调 */\n\tonResizeStart?: (sizes: number[]) => void;\n\t/** 双击拖拽条回调 */\n\tonDraggerDoubleClick?: (index: number) => void;\n\t/** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */\n\torientation?: SplitterOrientation;\n\t/** 容器根节点及各语义化结构(root、panel、dragger)自定义 CSS 样式,支持对象或函数 */\n\tstyle?: SplitterStyle;\n\t/** 是否垂直分屏(orientation=\"vertical\" 的简写形式) */\n\tvertical?: boolean;\n\t/** 自定义拖拽手柄图标/节点 */\n\tdraggerIcon?: ReactNode;\n};\n\nexport interface ResolvedCollapsible {\n\tstart: boolean;\n\tend: boolean;\n\tshowCollapsibleIcon: boolean | 'auto';\n}\n\nconst getCollapsibleConfig = (collapsible?: SplitterCollapsible): ResolvedCollapsible => {\n\tif (!collapsible) {\n\t\treturn { start: false, end: false, showCollapsibleIcon: 'auto' };\n\t}\n\tif (typeof collapsible === 'boolean') {\n\t\treturn {\n\t\t\tstart: collapsible,\n\t\t\tend: collapsible,\n\t\t\tshowCollapsibleIcon: collapsible ? true : 'auto',\n\t\t};\n\t}\n\treturn {\n\t\tstart: collapsible.start ?? false,\n\t\tend: collapsible.end ?? false,\n\t\tshowCollapsibleIcon: collapsible.showCollapsibleIcon ?? true,\n\t};\n};\n\ntype SplitterComponent = React.FC<SplitterProps> & {\n\tPanel: React.FC<SplitterPanelProps>;\n};\n\nconst DEFAULT_DRAGGER_SIZE = 4;\nconst MIN_DRAG_SIZE = 40; // 手动拖拽调整大小时的默认最小限制 (px)\n\nconst SplitterPanel: React.FC<SplitterPanelProps> = ({ children }) => <>{children}</>;\n\nconst isPercentSize = (value: SplitterSize): value is `${number}%` =>\n\ttypeof value === 'string' && value.endsWith('%');\n\nconst parseSize = (value: SplitterSize | undefined, total: number, fallback: number) => {\n\tif (value === undefined) {\n\t\treturn fallback;\n\t}\n\n\tif (isPercentSize(value)) {\n\t\treturn (Number.parseFloat(value) / 100) * total;\n\t}\n\n\treturn Number(value);\n};\n\nconst roundSizes = (sizes: number[]) => sizes.map((size) => Math.round(size));\n\nconst getPointerPosition = (\n\tevent: PointerEvent | ReactPointerEvent,\n\torientation: SplitterOrientation,\n) => (orientation === 'horizontal' ? event.clientX : event.clientY);\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveSemanticStyles = (\n\tstyle: SplitterStyle | undefined,\n\tinfoProps: SplitterProps,\n): Partial<Record<SplitterSemanticDOM, CSSProperties>> => {\n\tif (!style) {\n\t\treturn {};\n\t}\n\n\tconst resolved = typeof style === 'function' ? style({ props: infoProps }) : style;\n\tif (!resolved) {\n\t\treturn {};\n\t}\n\n\tconst hasSemanticKey = 'root' in resolved || 'panel' in resolved || 'dragger' in resolved;\n\n\tif (hasSemanticKey) {\n\t\treturn resolved as Partial<Record<SplitterSemanticDOM, CSSProperties>>;\n\t}\n\n\treturn { root: resolved as CSSProperties };\n};\n\nconst CustomSplitter: SplitterComponent = (props) => {\n\tconst {\n\t\tchildren,\n\t\tclassName,\n\t\tdestroyOnHidden = false,\n\t\tdraggerIcon,\n\t\tdraggerSize = DEFAULT_DRAGGER_SIZE,\n\t\tlazy = false,\n\t\tonResize,\n\t\tonResizeEnd,\n\t\tonResizeStart,\n\t\tonCollapse,\n\t\tonDraggerDoubleClick,\n\t\torientation,\n\t\tstyle,\n\t\tvertical = false,\n\t} = props;\n\tconst resolvedOrientation = orientation ?? (vertical ? 'vertical' : 'horizontal');\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\tconst sizesRef = useRef<number[]>([]);\n\tconst [containerSize, setContainerSize] = useState(0);\n\tconst [draggingIndex, setDraggingIndex] = useState<number | null>(null);\n\tconst [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n\tconst [hoveredCollapsePanelIndex, setHoveredCollapsePanelIndex] = useState<number | null>(null);\n\tconst [sizes, setSizes] = useState<number[]>([]);\n\n\tconst semanticStyles = useMemo(() => resolveSemanticStyles(style, props), [style, props]);\n\n\tconst panels = useMemo(\n\t\t() =>\n\t\t\tReact.Children.toArray(children).filter(\n\t\t\t\tReact.isValidElement,\n\t\t\t) as ReactElement<SplitterPanelProps>[],\n\t\t[children],\n\t);\n\n\tconst trackSize = Math.max(0, containerSize - Math.max(0, panels.length - 1) * draggerSize);\n\n\tconst getPanelMin = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.min, trackSize, 0),\n\t\t[panels, trackSize],\n\t);\n\n\tconst getPanelMax = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.max, trackSize, trackSize),\n\t\t[panels, trackSize],\n\t);\n\n\tconst normalizeToTrack = useCallback(\n\t\t(nextSizes: number[]) => {\n\t\t\tif (!trackSize || !nextSizes.length) {\n\t\t\t\treturn nextSizes;\n\t\t\t}\n\n\t\t\tconst normalized = [...nextSizes];\n\t\t\tconst diff = trackSize - normalized.reduce((sum, size) => sum + size, 0);\n\t\t\tconst flexibleIndex = normalized.findIndex((size) => size > 0);\n\t\t\tif (flexibleIndex !== -1) {\n\t\t\t\tnormalized[flexibleIndex] += diff;\n\t\t\t}\n\n\t\t\treturn normalized.map((size, index) => {\n\t\t\t\t// 折叠状态(size <= 1)保持为 0,不受 min 限制干扰\n\t\t\t\tif (size <= 1) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\t// 拖拽过程从 0 拖出时,允许在 0 到 min 之间平滑过渡,不被强行跳变到 min\n\t\t\t\tif (size < getPanelMin(index)) {\n\t\t\t\t\treturn size;\n\t\t\t\t}\n\t\t\t\treturn clamp(size, getPanelMin(index), getPanelMax(index));\n\t\t\t});\n\t\t},\n\t\t[getPanelMax, getPanelMin, trackSize],\n\t);\n\n\tconst buildInitialSizes = useCallback(\n\t\t(previous?: number[]) => {\n\t\t\tif (!trackSize || !panels.length) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tif (previous?.length === panels.length) {\n\t\t\t\tconst previousTotal = previous.reduce((sum, size) => sum + size, 0);\n\t\t\t\tif (previousTotal > 0) {\n\t\t\t\t\treturn normalizeToTrack(previous.map((size) => (size / previousTotal) * trackSize));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst explicitSizes = panels.map((panel) =>\n\t\t\t\tparseSize(panel.props.size ?? panel.props.defaultSize, trackSize, -1),\n\t\t\t);\n\t\t\tconst usedSize = explicitSizes\n\t\t\t\t.filter((size) => size >= 0)\n\t\t\t\t.reduce((sum, size) => sum + size, 0);\n\t\t\tconst unsetCount = explicitSizes.filter((size) => size < 0).length;\n\t\t\tconst fallbackSize = unsetCount ? Math.max(0, (trackSize - usedSize) / unsetCount) : 0;\n\n\t\t\treturn normalizeToTrack(\n\t\t\t\texplicitSizes.map((size, index) =>\n\t\t\t\t\tclamp(size >= 0 ? size : fallbackSize, getPanelMin(index), getPanelMax(index)),\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack, panels, trackSize],\n\t);\n\n\tconst updateSizes = useCallback(\n\t\t(nextSizes: number[], notify = true) => {\n\t\t\tconst normalized = normalizeToTrack(nextSizes);\n\t\t\tsetSizes(normalized);\n\t\t\tsizesRef.current = normalized;\n\t\t\tif (notify) {\n\t\t\t\tonResize?.(roundSizes(normalized));\n\t\t\t}\n\t\t},\n\t\t[normalizeToTrack, onResize],\n\t);\n\n\tuseEffect(() => {\n\t\tconst node = rootRef.current;\n\t\tif (!node) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst syncSize = () => {\n\t\t\tsetContainerSize(resolvedOrientation === 'horizontal' ? node.clientWidth : node.clientHeight);\n\t\t};\n\t\tsyncSize();\n\n\t\tconst observer = new ResizeObserver(syncSize);\n\t\tobserver.observe(node);\n\t\treturn () => observer.disconnect();\n\t}, [resolvedOrientation]);\n\n\tuseEffect(() => {\n\t\tsetSizes((previous) => {\n\t\t\tconst nextSizes = buildInitialSizes(previous);\n\t\t\tsizesRef.current = nextSizes;\n\t\t\treturn nextSizes;\n\t\t});\n\t}, [buildInitialSizes]);\n\n\tconst getResizedPair = useCallback(\n\t\t(sourceSizes: number[], index: number, delta: number) => {\n\t\t\tconst nextSizes = [...sourceSizes];\n\t\t\tconst isLeftCollapsed = sourceSizes[index] <= 1;\n\t\t\tconst isRightCollapsed = sourceSizes[index + 1] <= 1;\n\n\t\t\tconst leftMin = isLeftCollapsed ? 0 : getPanelMin(index);\n\t\t\tconst rightMin = isRightCollapsed ? 0 : getPanelMin(index + 1);\n\t\t\tconst leftMax = getPanelMax(index);\n\t\t\tconst rightMax = getPanelMax(index + 1);\n\n\t\t\tconst minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);\n\t\t\tconst maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);\n\t\t\tconst safeDelta = clamp(delta, minDelta, maxDelta);\n\n\t\t\tnextSizes[index] = sourceSizes[index] + safeDelta;\n\t\t\tnextSizes[index + 1] = sourceSizes[index + 1] - safeDelta;\n\t\t\treturn normalizeToTrack(nextSizes);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack],\n\t);\n\n\tconst resizePair = useCallback(\n\t\t(index: number, delta: number, notify = true) => {\n\t\t\tupdateSizes(getResizedPair(sizesRef.current, index, delta), notify);\n\t\t},\n\t\t[getResizedPair, updateSizes],\n\t);\n\n\tconst startResize = (index: number, event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (panels[index].props.resizable === false || panels[index + 1].props.resizable === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tconst startPosition = getPointerPosition(event, resolvedOrientation);\n\t\tconst startSizes = [...sizesRef.current];\n\t\tlet latestSizes = startSizes;\n\n\t\tsetDraggingIndex(index);\n\t\tonResizeStart?.(roundSizes(startSizes));\n\n\t\tconst handlePointerMove = (moveEvent: PointerEvent) => {\n\t\t\tconst delta = getPointerPosition(moveEvent, resolvedOrientation) - startPosition;\n\t\t\tlatestSizes = getResizedPair(startSizes, index, delta);\n\t\t\tif (!lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePointerUp = () => {\n\t\t\tdocument.removeEventListener('pointermove', handlePointerMove);\n\t\t\tdocument.removeEventListener('pointerup', handlePointerUp);\n\t\t\tsetDraggingIndex(null);\n\t\t\tif (lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\t\tconst startCollapsed = startSizes.map((size) => size <= 1);\n\t\t\tif (currentCollapsed.some((c, i) => c !== startCollapsed[i])) {\n\t\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t\t}\n\t\t\tonResizeEnd?.(currentSizes);\n\t\t};\n\n\t\tdocument.addEventListener('pointermove', handlePointerMove);\n\t\tdocument.addEventListener('pointerup', handlePointerUp);\n\t};\n\n\tconst toggleCollapse = (index: number, neighborIndex: number) => {\n\t\tconst nextSizes = [...sizesRef.current];\n\n\t\tif (nextSizes[index] > 1) {\n\t\t\tnextSizes[neighborIndex] += nextSizes[index];\n\t\t\tnextSizes[index] = 0;\n\t\t} else {\n\t\t\tconst initialSizes = buildInitialSizes();\n\t\t\tconst initialSize =\n\t\t\t\tinitialSizes[index] ??\n\t\t\t\tparseSize(panels[index].props.defaultSize, trackSize, trackSize / panels.length);\n\t\t\tconst restoredSize = clamp(initialSize, getPanelMin(index), getPanelMax(index));\n\t\t\tnextSizes[index] = restoredSize;\n\t\t\tnextSizes[neighborIndex] = Math.max(0, nextSizes[neighborIndex] - nextSizes[index]);\n\t\t}\n\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst resetSizes = () => {\n\t\tconst previousCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tconst nextSizes = buildInitialSizes();\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tif (currentCollapsed.some((c, i) => c !== previousCollapsed[i])) {\n\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t}\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst rootStyle: CSSProperties = {\n\t\tborder: '1px solid #f0f0f0',\n\t\tborderRadius: 8,\n\t\tboxSizing: 'border-box',\n\t\tdisplay: 'flex',\n\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\theight: 360,\n\t\tminHeight: 0,\n\t\toverflow: 'hidden',\n\t\tposition: 'relative',\n\t\twidth: '100%',\n\t\t...semanticStyles.root,\n\t};\n\n\tconst renderCollapseButton = (\n\t\tdraggerIndex: number,\n\t\tpanelIndex: number,\n\t\tdirection: 'start' | 'end',\n\t) => {\n\t\tconst panel = panels[panelIndex];\n\t\tconst config = getCollapsibleConfig(panel?.props.collapsible);\n\t\tconst isAllowed = direction === 'start' ? config.start : config.end;\n\n\t\tif (!isAllowed || config.showCollapsibleIcon === false) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst neighborIndex = direction === 'start' ? panelIndex + 1 : panelIndex - 1;\n\t\tconst isCollapsed = (sizes[panelIndex] ?? 0) <= 1;\n\t\tconst isNeighborCollapsed = (sizes[neighborIndex] ?? 0) <= 1;\n\n\t\t// 自己折叠后隐藏;对侧面板折叠后也隐藏(避免与展开按钮重复/语义冲突)\n\t\tif (isCollapsed || isNeighborCollapsed) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// 展开时箭头指向面板将被折叠到的方向\n\t\tconst Icon =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? LeftOutlined\n\t\t\t\t\t: RightOutlined\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? UpOutlined\n\t\t\t\t\t: DownOutlined;\n\n\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\t\tconst isAlwaysShow = config.showCollapsibleIcon === true;\n\t\tconst isHoveredOrDragging = hoveredIndex === draggerIndex || draggingIndex === draggerIndex;\n\t\tconst opacity = isAlwaysShow || isHoveredOrDragging ? 1 : 0;\n\t\tconst pointerEvents = isAlwaysShow || isHoveredOrDragging ? 'auto' : 'none';\n\n\t\tconst buttonTitle =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? '折叠左侧面板'\n\t\t\t\t\t: '折叠右侧面板'\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? '折叠上方面板'\n\t\t\t\t\t: '折叠下方面板';\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\taria-label={buttonTitle}\n\t\t\t\ttitle={buttonTitle}\n\t\t\t\tonClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\ttoggleCollapse(panelIndex, neighborIndex);\n\t\t\t\t}}\n\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}}\n\t\t\t\tstyle={{\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\tborder: '1px solid #d9d9d9',\n\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tfontSize: 10,\n\t\t\t\t\tboxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\topacity,\n\t\t\t\t\tpointerEvents,\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(panelIndex);\n\t\t\t\t}}\n\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#fff';\n\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Icon />\n\t\t\t</button>\n\t\t);\n\t};\n\n\treturn (\n\t\t<div className={className} ref={rootRef} style={rootStyle}>\n\t\t\t{panels.map((panel, index) => {\n\t\t\t\tconst isHidden = sizes[index] <= 1;\n\t\t\t\tconst isLeftOrTopCollapsed = (sizes[index] ?? 0) <= 1;\n\t\t\t\tconst isRightOrBottomCollapsed = (sizes[index + 1] ?? 0) <= 1;\n\t\t\t\tconst isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;\n\t\t\t\tconst panelDestroyOnHidden = panel.props.destroyOnHidden ?? destroyOnHidden;\n\t\t\t\tconst shouldRenderContent = !isHidden || !panelDestroyOnHidden;\n\n\t\t\t\treturn (\n\t\t\t\t\t<React.Fragment key={index}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackground: index % 2 ? '#fff' : '#fafafa',\n\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\tflex: `0 0 ${sizes[index] ?? 0}px`,\n\t\t\t\t\t\t\t\tminHeight: 0,\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\tboxShadow:\n\t\t\t\t\t\t\t\t\thoveredCollapsePanelIndex === index ? 'inset 0 0 0 2px #1677ff' : undefined,\n\t\t\t\t\t\t\t\ttransition:\n\t\t\t\t\t\t\t\t\tdraggingIndex === null ? 'box-shadow 0.2s ease, flex-basis 0.2s ease' : undefined,\n\t\t\t\t\t\t\t\t...semanticStyles.panel,\n\t\t\t\t\t\t\t\t...panel.props.style,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{shouldRenderContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\t\tdisplay: isHidden ? 'none' : 'block',\n\t\t\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t\t\t\t\t\tpadding: (sizes[index] ?? 0) < 32 ? 0 : 16,\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{panel.props.children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{index < panels.length - 1 && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\taria-orientation={resolvedOrientation}\n\t\t\t\t\t\t\t\tonDoubleClick={() => {\n\t\t\t\t\t\t\t\t\tonDraggerDoubleClick?.(index);\n\t\t\t\t\t\t\t\t\tresetSizes();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\t\tconst step = event.shiftKey ? 40 : 10;\n\t\t\t\t\t\t\t\t\tconst directionMap =\n\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? { ArrowLeft: -step, ArrowRight: step }\n\t\t\t\t\t\t\t\t\t\t\t: { ArrowUp: -step, ArrowDown: step };\n\t\t\t\t\t\t\t\t\tconst delta = directionMap[event.key as keyof typeof directionMap];\n\t\t\t\t\t\t\t\t\tif (delta !== undefined) {\n\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\tresizePair(index, delta);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonPointerDown={(event) => startResize(index, event)}\n\t\t\t\t\t\t\t\tonPointerEnter={() => setHoveredIndex(index)}\n\t\t\t\t\t\t\t\tonPointerLeave={() => setHoveredIndex(null)}\n\t\t\t\t\t\t\t\trole=\"separator\"\n\t\t\t\t\t\t\t\ttitle=\"拖动调整大小,双击重置\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#e6f4ff' : '#f5f5f5',\n\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\tcursor: resolvedOrientation === 'horizontal' ? 'col-resize' : 'row-resize',\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\tflex: `0 0 ${draggerSize}px`,\n\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\toutline: 'none',\n\t\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\tzIndex: isAnyCollapsed ? 2 : 1,\n\t\t\t\t\t\t\t\t\t...semanticStyles.dragger,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* 呈现拖拽指示线/图标 */}\n\t\t\t\t\t\t\t\t{(hoveredIndex === index || draggingIndex === index || !isAnyCollapsed) &&\n\t\t\t\t\t\t\t\t\t(draggerIcon ? (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#8c8c8c',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'color 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{draggerIcon}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#d9d9d9',\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\t\t\t\t\theight: resolvedOrientation === 'horizontal' ? 40 : 2,\n\t\t\t\t\t\t\t\t\t\t\t\twidth: resolvedOrientation === 'horizontal' ? 2 : 40,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t\t\t{/* 未折叠状态下呈现折叠按钮 */}\n\t\t\t\t\t\t\t\t{!isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop: '50%',\n\t\t\t\t\t\t\t\t\t\t\tleft: '50%',\n\t\t\t\t\t\t\t\t\t\t\ttransform: 'translate(-50%, -50%)',\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index, 'start')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-start',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index + 1, 'end')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* 折叠状态下呈现展开按钮(常态保持显示,精准垂直居中) */}\n\t\t\t\t\t\t\t\t{isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? '50%'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tbottom:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tleft:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: '50%',\n\t\t\t\t\t\t\t\t\t\t\tright:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'auto',\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `translate(${isLeftOrTopCollapsed ? '4px' : '-4px'}, -50%)`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `translate(-50%, ${isLeftOrTopCollapsed ? '4px' : '-4px'})`,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\t\t\tconst targetIndex = isLeftOrTopCollapsed ? index : index + 1;\n\t\t\t\t\t\t\t\t\t\t\tconst targetPanel = panels[targetIndex];\n\t\t\t\t\t\t\t\t\t\t\tconst config = getCollapsibleConfig(targetPanel?.props.collapsible);\n\t\t\t\t\t\t\t\t\t\t\tif (config.showCollapsibleIcon === false) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tconst ExpandIcon =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? RightOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: LeftOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? DownOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: UpOutlined;\n\n\t\t\t\t\t\t\t\t\t\t\tconst neighborIndex = isLeftOrTopCollapsed ? index + 1 : index;\n\t\t\t\t\t\t\t\t\t\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\n\t\t\t\t\t\t\t\t\t\t\tconst expandTitle =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开左侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开右侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开上方面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开下方面板';\n\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleCollapse(targetIndex, neighborIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: '#f3f4f6',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: '1px solid #e5e7eb',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 1px 3px rgba(0, 0, 0, 0.08)',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(targetIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#f3f4f6';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ExpandIcon />\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})()}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nCustomSplitter.Panel = SplitterPanel;\n\nexport default CustomSplitter;\n"],"mappings":"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","names":["import_jsx_runtime","import_react","import_jsx_runtime","React"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../CollapseBox/index.tsx","../src/icons.tsx","../Splitter/index.tsx"],"sourcesContent":["// 统一入口\nexport { default as CollapseBox } from '../CollapseBox';\nexport type {\n\tCollapseBoxProps,\n\tCollapseBoxDirection,\n\tCollapseBoxButtonPosition,\n} from '../CollapseBox';\n\nexport { default as Splitter } from '../Splitter';\nexport type {\n\tSplitterProps,\n\tSplitterPanelProps,\n\tSplitterCollapsible,\n\tSplitterSize,\n\tSplitterOrientation,\n} from '../Splitter';\n","import { useState, type CSSProperties, type ReactNode } from 'react';\nimport { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport './index.less';\n\nexport type CollapseBoxDirection = 'horizontal' | 'vertical';\nexport type CollapseBoxButtonPosition = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface CollapseBoxProps {\n\tchildren?: ReactNode;\n\ttitle?: string;\n\tdirection?: CollapseBoxDirection;\n\tbuttonPosition?: CollapseBoxButtonPosition;\n\tdefaultWidth?: number | string;\n\tdefaultHeight?: number | string;\n\tcontentPadding?: string;\n\theaderHeight?: number;\n\tclassName?: string;\n}\n\nconst formatDimension = (value?: number | string): string | undefined => {\n\tif (value === undefined || value === null) return undefined;\n\treturn typeof value === 'number' ? `${value}px` : value;\n};\n\nconst ChevronLeft = () => <LeftOutlined />;\n\nconst ChevronRight = () => <RightOutlined />;\n\nconst ChevronUp = () => <UpOutlined />;\n\nconst ChevronDown = () => <DownOutlined />;\n\nconst CollapsibleBox = ({\n\tchildren,\n\ttitle = '内容区域',\n\tdirection = 'horizontal',\n\tbuttonPosition = 'right',\n\tdefaultWidth = 600,\n\tdefaultHeight = 300,\n\tcontentPadding = '16px',\n\theaderHeight = 16,\n\tclassName,\n}: CollapseBoxProps) => {\n\tconst [isExpanded, setIsExpanded] = useState(true);\n\n\tconst getContentMaxHeight = () => {\n\t\tif (typeof defaultHeight === 'number') {\n\t\t\treturn `${defaultHeight - headerHeight}px`;\n\t\t}\n\t\tif (typeof defaultHeight === 'string') {\n\t\t\treturn headerHeight ? `calc(${defaultHeight} - ${headerHeight}px)` : defaultHeight;\n\t\t}\n\t\treturn '100%';\n\t};\n\n\tconst getIcon = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\tif (buttonPosition === 'right') {\n\t\t\t\treturn isExpanded ? <ChevronRight /> : <ChevronLeft />;\n\t\t\t} else {\n\t\t\t\treturn isExpanded ? <ChevronLeft /> : <ChevronRight />;\n\t\t\t}\n\t\t} else {\n\t\t\tif (buttonPosition === 'bottom') {\n\t\t\t\treturn isExpanded ? <ChevronUp /> : <ChevronDown />;\n\t\t\t} else {\n\t\t\t\treturn isExpanded ? <ChevronDown /> : <ChevronUp />;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst getButtonClass = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\treturn buttonPosition === 'right' ? 'button-right' : 'button-left';\n\t\t} else {\n\t\t\treturn buttonPosition === 'bottom' ? 'button-bottom' : 'button-top';\n\t\t}\n\t};\n\n\tconst getContainerStyle = (): CSSProperties => {\n\t\tconst resolvedHeight = formatDimension(defaultHeight);\n\t\tconst resolvedWidth = formatDimension(defaultWidth);\n\t\tif (direction === 'horizontal') {\n\t\t\treturn {\n\t\t\t\twidth: isExpanded ? resolvedWidth : '0px',\n\t\t\t\theight: resolvedHeight,\n\t\t\t\tminWidth: 0,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\theight: isExpanded ? resolvedHeight : '0px',\n\t\t\t\twidth: resolvedWidth,\n\t\t\t\tminHeight: 0,\n\t\t\t};\n\t\t}\n\t};\n\n\tconst baseWrapperClass =\n\t\tdirection === 'horizontal' ? 'collapsible-wrapper horizontal' : 'collapsible-wrapper vertical';\n\tconst wrapperClass = className ? `${baseWrapperClass} ${className}` : baseWrapperClass;\n\n\tconst containerClass =\n\t\tdirection === 'horizontal' && buttonPosition === 'right'\n\t\t\t? 'collapsible-container align-right'\n\t\t\t: 'collapsible-container';\n\tconst height = getContentMaxHeight();\n\tconst contentStyle: CSSProperties = {\n\t\tmaxHeight: direction === 'vertical' ? (isExpanded ? height : '0px') : height,\n\t\toverflowY: 'auto',\n\t\tpadding: direction === 'vertical' && !isExpanded ? '0px' : contentPadding,\n\t\tboxSizing: 'border-box',\n\t};\n\n\t// 折叠时(纵向 + 底部按钮):按钮需切换为 top:0 定位,使其显示在折叠线下方\n\tconst buttonStyle: CSSProperties =\n\t\tdirection === 'vertical' && buttonPosition === 'bottom' && !isExpanded\n\t\t\t? { top: '0px', bottom: 'auto' }\n\t\t\t: {};\n\n\t// 让 wrapper 高度跟随容器,确保 bottom:0 的按钮贴住容器底部\n\t// 折叠时 wrapper 高度为 0,配合按钮的 translateY(-100%) 让按钮显示在折叠线上方\n\tconst formattedWidth = formatDimension(defaultWidth);\n\tconst formattedHeight = formatDimension(defaultHeight);\n\tconst wrapperStyle: CSSProperties | undefined =\n\t\tdirection === 'vertical'\n\t\t\t? isExpanded\n\t\t\t\t? {\n\t\t\t\t\t\theight: formattedHeight,\n\t\t\t\t\t\twidth: formattedWidth,\n\t\t\t\t\t}\n\t\t\t\t: { height: 0, width: formattedWidth }\n\t\t\t: undefined;\n\n\treturn (\n\t\t<div className={wrapperClass} style={wrapperStyle}>\n\t\t\t<div style={getContainerStyle()} className={containerClass}>\n\t\t\t\t{title && (\n\t\t\t\t\t<div className=\"collapsible-header\" style={{ display: 'none' }}>\n\t\t\t\t\t\t<h3>{title}</h3>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"collapsible-content\" style={contentStyle}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tonClick={() => setIsExpanded(!isExpanded)}\n\t\t\t\tclassName={`toggle-button ${getButtonClass()}`}\n\t\t\t\tstyle={buttonStyle}\n\t\t\t\ttitle={isExpanded ? '隐藏' : '展开'}\n\t\t\t>\n\t\t\t\t{getIcon()}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default CollapsibleBox;\n","import type { CSSProperties } from 'react';\n\ninterface IconProps {\n\tstyle?: CSSProperties;\n\tclassName?: string;\n}\n\nconst baseStyle: CSSProperties = {\n\tdisplay: 'inline-block',\n\twidth: '1em',\n\theight: '1em',\n\tverticalAlign: '-0.125em',\n};\n\nexport const LeftOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"left\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z\" />\n\t</svg>\n);\n\nexport const RightOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"right\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z\" />\n\t</svg>\n);\n\nexport const UpOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"up\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M890.5 755.3L537.4 268a31.96 31.96 0 00-50.8 0L133.5 755.3a7.95 7.95 0 006.3 12.7h75.5c4.9 0 9.6-2.3 12.6-6.1l281-360 281 360c3 3.8 7.7 6.1 12.6 6.1h75.5c6.7 0 10.4-7.6 6.1-12.7z\" />\n\t</svg>\n);\n\nexport const DownOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"down\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 37 17.6 49.8 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\" />\n\t</svg>\n);\n","import { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport type {\n\tCSSProperties,\n\tReactElement,\n\tReactNode,\n\tPointerEvent as ReactPointerEvent,\n} from 'react';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nexport type SplitterSize = number | `${number}%`;\nexport type SplitterOrientation = 'horizontal' | 'vertical';\n\nexport type SplitterCollapsible =\n\t| boolean\n\t| {\n\t\t\tstart?: boolean;\n\t\t\tend?: boolean;\n\t\t\tshowCollapsibleIcon?: boolean | 'auto';\n\t };\n\n/**\n * Splitter.Panel 子面板组件属性\n */\nexport type SplitterPanelProps = {\n\t/** 面板内容节点 */\n\tchildren?: ReactNode;\n\t/** 面板自定义类名 */\n\tclassName?: string;\n\t/**\n\t * 折叠配置:\n\t * - `boolean`: 是否允许两端折叠\n\t * - `Object`: `{ start?: boolean; end?: boolean; showCollapsibleIcon?: boolean | 'auto' }`\n\t */\n\tcollapsible?: SplitterCollapsible;\n\t/** 面板初始默认尺寸(支持数字 px 或百分比字符串如 '40%') */\n\tdefaultSize?: SplitterSize;\n\t/** 折叠/隐藏时是否销毁面板内容节点(可覆盖 Splitter 根容器上的 destroyOnHidden 属性) */\n\tdestroyOnHidden?: boolean;\n\t/** 面板最大允许尺寸限制 */\n\tmax?: SplitterSize;\n\t/** 面板最小允许尺寸限制 */\n\tmin?: SplitterSize;\n\t/** 是否允许通过分隔条拖拽调整大小(默认 true) */\n\tresizable?: boolean;\n\t/** 面板受控尺寸 */\n\tsize?: SplitterSize;\n\t/** 面板自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n};\n\nexport type SplitterSemanticDOM = 'root' | 'panel' | 'dragger';\n/** 语义化 DOM 结构标识 */\nexport type SemanticDOM = SplitterSemanticDOM;\n\nexport type SplitterStyles =\n\t| Partial<Record<SplitterSemanticDOM, CSSProperties>>\n\t| ((info: { props: SplitterProps }) => Partial<Record<SplitterSemanticDOM, CSSProperties>>);\n\nexport type SplitterClassNames =\n\t| Partial<Record<SplitterSemanticDOM, string>>\n\t| ((info: { props: SplitterProps }) => Partial<Record<SplitterSemanticDOM, string>>);\n\n/**\n * Splitter 根容器组件属性\n */\nexport type SplitterProps = {\n\t/** 面板集合(建议传入 Splitter.Panel) */\n\tchildren?: ReactNode;\n\t/** 容器根节点自定义类名 */\n\tclassName?: string;\n\t/** 用于自定义组件内部各语义化结构(root、panel、dragger)的 class,支持对象或函数 */\n\tclassNames?: SplitterClassNames;\n\t/** 折叠/隐藏时是否销毁面板内容节点(默认 false,保留组件状态) */\n\tdestroyOnHidden?: boolean;\n\t/** 拖拽分隔条的宽度/高度(单位 px,默认 4) */\n\tdraggerSize?: number;\n\t/** 是否在拖拽结束时才更新视图(默认 false) */\n\tlazy?: boolean;\n\t/** 面板展开或折叠状态改变时的回调 */\n\tonCollapse?: (collapsed: boolean[], sizes: number[]) => void;\n\t/** 拖拽过程中的实时尺寸变化回调 */\n\tonResize?: (sizes: number[]) => void;\n\t/** 拖拽结束、重置尺寸或折叠完成时的回调 */\n\tonResizeEnd?: (sizes: number[]) => void;\n\t/** 开始拖拽分隔条时的回调 */\n\tonResizeStart?: (sizes: number[]) => void;\n\t/** 双击拖拽条回调 */\n\tonDraggerDoubleClick?: (index: number) => void;\n\t/** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */\n\torientation?: SplitterOrientation;\n\t/** 容器根节点自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n\t/** 容器根节点及各语义化结构(root、panel、dragger)自定义 CSS 样式,支持对象或函数 */\n\tstyles?: SplitterStyles;\n\t/** 是否垂直分屏(orientation=\"vertical\" 的简写形式) 排列方向,与 orientation 同时存在,以 orientation 优先 */\n\tvertical?: boolean;\n\t/** 自定义拖拽手柄图标/节点 */\n\tdraggerIcon?: ReactNode;\n};\n\nexport interface ResolvedCollapsible {\n\tstart: boolean;\n\tend: boolean;\n\tshowCollapsibleIcon: boolean | 'auto';\n}\n\nconst getCollapsibleConfig = (collapsible?: SplitterCollapsible): ResolvedCollapsible => {\n\tif (!collapsible) {\n\t\treturn { start: false, end: false, showCollapsibleIcon: 'auto' };\n\t}\n\tif (typeof collapsible === 'boolean') {\n\t\treturn {\n\t\t\tstart: collapsible,\n\t\t\tend: collapsible,\n\t\t\tshowCollapsibleIcon: collapsible ? true : 'auto',\n\t\t};\n\t}\n\treturn {\n\t\tstart: collapsible.start ?? false,\n\t\tend: collapsible.end ?? false,\n\t\tshowCollapsibleIcon: collapsible.showCollapsibleIcon ?? true,\n\t};\n};\n\ntype SplitterComponent = React.FC<SplitterProps> & {\n\tPanel: React.FC<SplitterPanelProps>;\n};\n\nconst DEFAULT_DRAGGER_SIZE = 4;\nconst MIN_DRAG_SIZE = 40; // 手动拖拽调整大小时的默认最小限制 (px)\n\nconst SplitterPanel: React.FC<SplitterPanelProps> = ({ children }) => <>{children}</>;\n\nconst isPercentSize = (value: SplitterSize): value is `${number}%` =>\n\ttypeof value === 'string' && value.endsWith('%');\n\nconst parseSize = (value: SplitterSize | undefined, total: number, fallback: number) => {\n\tif (value === undefined) {\n\t\treturn fallback;\n\t}\n\n\tif (isPercentSize(value)) {\n\t\treturn (Number.parseFloat(value) / 100) * total;\n\t}\n\n\treturn Number(value);\n};\n\nconst roundSizes = (sizes: number[]) => sizes.map((size) => Math.round(size));\n\nconst getPointerPosition = (\n\tevent: PointerEvent | ReactPointerEvent,\n\torientation: SplitterOrientation,\n) => (orientation === 'horizontal' ? event.clientX : event.clientY);\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveSemanticStyles = (\n\tstyles: SplitterStyles | undefined,\n\tinfoProps: SplitterProps,\n): Partial<Record<SplitterSemanticDOM, CSSProperties>> => {\n\tif (!styles) {\n\t\treturn {};\n\t}\n\n\tconst resolved = typeof styles === 'function' ? styles({ props: infoProps }) : styles;\n\treturn resolved || {};\n};\n\nconst resolveSemanticClassNames = (\n\tclassNames: SplitterClassNames | undefined,\n\tinfoProps: SplitterProps,\n): Partial<Record<SplitterSemanticDOM, string>> => {\n\tif (!classNames) {\n\t\treturn {};\n\t}\n\n\tconst resolved = typeof classNames === 'function' ? classNames({ props: infoProps }) : classNames;\n\treturn resolved || {};\n};\n\nconst CustomSplitter: SplitterComponent = (props) => {\n\tconst {\n\t\tchildren,\n\t\tclassName,\n\t\tclassNames,\n\t\tdestroyOnHidden = false,\n\t\tdraggerIcon,\n\t\tdraggerSize = DEFAULT_DRAGGER_SIZE,\n\t\tlazy = false,\n\t\tonResize,\n\t\tonResizeEnd,\n\t\tonResizeStart,\n\t\tonCollapse,\n\t\tonDraggerDoubleClick,\n\t\torientation,\n\t\tstyle,\n\t\tstyles,\n\t\tvertical = false,\n\t} = props;\n\tconst resolvedOrientation = orientation ?? (vertical ? 'vertical' : 'horizontal');\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\tconst sizesRef = useRef<number[]>([]);\n\tconst [containerSize, setContainerSize] = useState(0);\n\tconst [draggingIndex, setDraggingIndex] = useState<number | null>(null);\n\tconst [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n\tconst [hoveredCollapsePanelIndex, setHoveredCollapsePanelIndex] = useState<number | null>(null);\n\tconst [sizes, setSizes] = useState<number[]>([]);\n\n\tconst semanticStyles = useMemo(() => resolveSemanticStyles(styles, props), [styles, props]);\n\tconst semanticClassNames = useMemo(\n\t\t() => resolveSemanticClassNames(classNames, props),\n\t\t[classNames, props],\n\t);\n\n\tconst panels = useMemo(\n\t\t() =>\n\t\t\tReact.Children.toArray(children).filter(\n\t\t\t\tReact.isValidElement,\n\t\t\t) as ReactElement<SplitterPanelProps>[],\n\t\t[children],\n\t);\n\n\tconst trackSize = Math.max(0, containerSize - Math.max(0, panels.length - 1) * draggerSize);\n\n\tconst getPanelMin = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.min, trackSize, 0),\n\t\t[panels, trackSize],\n\t);\n\n\tconst getPanelMax = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.max, trackSize, trackSize),\n\t\t[panels, trackSize],\n\t);\n\n\tconst normalizeToTrack = useCallback(\n\t\t(nextSizes: number[]) => {\n\t\t\tif (!trackSize || !nextSizes.length) {\n\t\t\t\treturn nextSizes;\n\t\t\t}\n\n\t\t\tconst normalized = [...nextSizes];\n\t\t\tconst diff = trackSize - normalized.reduce((sum, size) => sum + size, 0);\n\t\t\tconst flexibleIndex = normalized.findIndex((size) => size > 0);\n\t\t\tif (flexibleIndex !== -1) {\n\t\t\t\tnormalized[flexibleIndex] += diff;\n\t\t\t}\n\n\t\t\treturn normalized.map((size, index) => {\n\t\t\t\t// 折叠状态(size <= 1)保持为 0,不受 min 限制干扰\n\t\t\t\tif (size <= 1) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\t// 拖拽过程从 0 拖出时,允许在 0 到 min 之间平滑过渡,不被强行跳变到 min\n\t\t\t\tif (size < getPanelMin(index)) {\n\t\t\t\t\treturn size;\n\t\t\t\t}\n\t\t\t\treturn clamp(size, getPanelMin(index), getPanelMax(index));\n\t\t\t});\n\t\t},\n\t\t[getPanelMax, getPanelMin, trackSize],\n\t);\n\n\tconst buildInitialSizes = useCallback(\n\t\t(previous?: number[]) => {\n\t\t\tif (!trackSize || !panels.length) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tif (previous?.length === panels.length) {\n\t\t\t\tconst previousTotal = previous.reduce((sum, size) => sum + size, 0);\n\t\t\t\tif (previousTotal > 0) {\n\t\t\t\t\treturn normalizeToTrack(previous.map((size) => (size / previousTotal) * trackSize));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst explicitSizes = panels.map((panel) =>\n\t\t\t\tparseSize(panel.props.size ?? panel.props.defaultSize, trackSize, -1),\n\t\t\t);\n\t\t\tconst usedSize = explicitSizes\n\t\t\t\t.filter((size) => size >= 0)\n\t\t\t\t.reduce((sum, size) => sum + size, 0);\n\t\t\tconst unsetCount = explicitSizes.filter((size) => size < 0).length;\n\t\t\tconst fallbackSize = unsetCount ? Math.max(0, (trackSize - usedSize) / unsetCount) : 0;\n\n\t\t\treturn normalizeToTrack(\n\t\t\t\texplicitSizes.map((size, index) =>\n\t\t\t\t\tclamp(size >= 0 ? size : fallbackSize, getPanelMin(index), getPanelMax(index)),\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack, panels, trackSize],\n\t);\n\n\tconst updateSizes = useCallback(\n\t\t(nextSizes: number[], notify = true) => {\n\t\t\tconst normalized = normalizeToTrack(nextSizes);\n\t\t\tsetSizes(normalized);\n\t\t\tsizesRef.current = normalized;\n\t\t\tif (notify) {\n\t\t\t\tonResize?.(roundSizes(normalized));\n\t\t\t}\n\t\t},\n\t\t[normalizeToTrack, onResize],\n\t);\n\n\tuseEffect(() => {\n\t\tconst node = rootRef.current;\n\t\tif (!node) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst syncSize = () => {\n\t\t\tsetContainerSize(resolvedOrientation === 'horizontal' ? node.clientWidth : node.clientHeight);\n\t\t};\n\t\tsyncSize();\n\n\t\tconst observer = new ResizeObserver(syncSize);\n\t\tobserver.observe(node);\n\t\treturn () => observer.disconnect();\n\t}, [resolvedOrientation]);\n\n\tuseEffect(() => {\n\t\tsetSizes((previous) => {\n\t\t\tconst nextSizes = buildInitialSizes(previous);\n\t\t\tsizesRef.current = nextSizes;\n\t\t\treturn nextSizes;\n\t\t});\n\t}, [buildInitialSizes]);\n\n\tconst getResizedPair = useCallback(\n\t\t(sourceSizes: number[], index: number, delta: number) => {\n\t\t\tconst nextSizes = [...sourceSizes];\n\t\t\tconst isLeftCollapsed = sourceSizes[index] <= 1;\n\t\t\tconst isRightCollapsed = sourceSizes[index + 1] <= 1;\n\n\t\t\tconst leftMin = isLeftCollapsed ? 0 : getPanelMin(index);\n\t\t\tconst rightMin = isRightCollapsed ? 0 : getPanelMin(index + 1);\n\t\t\tconst leftMax = getPanelMax(index);\n\t\t\tconst rightMax = getPanelMax(index + 1);\n\n\t\t\tconst minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);\n\t\t\tconst maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);\n\t\t\tconst safeDelta = clamp(delta, minDelta, maxDelta);\n\n\t\t\tnextSizes[index] = sourceSizes[index] + safeDelta;\n\t\t\tnextSizes[index + 1] = sourceSizes[index + 1] - safeDelta;\n\t\t\treturn normalizeToTrack(nextSizes);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack],\n\t);\n\n\tconst resizePair = useCallback(\n\t\t(index: number, delta: number, notify = true) => {\n\t\t\tupdateSizes(getResizedPair(sizesRef.current, index, delta), notify);\n\t\t},\n\t\t[getResizedPair, updateSizes],\n\t);\n\n\tconst startResize = (index: number, event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (panels[index].props.resizable === false || panels[index + 1].props.resizable === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tconst startPosition = getPointerPosition(event, resolvedOrientation);\n\t\tconst startSizes = [...sizesRef.current];\n\t\tlet latestSizes = startSizes;\n\n\t\tsetDraggingIndex(index);\n\t\tonResizeStart?.(roundSizes(startSizes));\n\n\t\tconst handlePointerMove = (moveEvent: PointerEvent) => {\n\t\t\tconst delta = getPointerPosition(moveEvent, resolvedOrientation) - startPosition;\n\t\t\tlatestSizes = getResizedPair(startSizes, index, delta);\n\t\t\tif (!lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePointerUp = () => {\n\t\t\tdocument.removeEventListener('pointermove', handlePointerMove);\n\t\t\tdocument.removeEventListener('pointerup', handlePointerUp);\n\t\t\tsetDraggingIndex(null);\n\t\t\tif (lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\t\tconst startCollapsed = startSizes.map((size) => size <= 1);\n\t\t\tif (currentCollapsed.some((c, i) => c !== startCollapsed[i])) {\n\t\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t\t}\n\t\t\tonResizeEnd?.(currentSizes);\n\t\t};\n\n\t\tdocument.addEventListener('pointermove', handlePointerMove);\n\t\tdocument.addEventListener('pointerup', handlePointerUp);\n\t};\n\n\tconst toggleCollapse = (index: number, neighborIndex: number) => {\n\t\tconst nextSizes = [...sizesRef.current];\n\n\t\tif (nextSizes[index] > 1) {\n\t\t\tnextSizes[neighborIndex] += nextSizes[index];\n\t\t\tnextSizes[index] = 0;\n\t\t} else {\n\t\t\tconst initialSizes = buildInitialSizes();\n\t\t\tconst initialSize =\n\t\t\t\tinitialSizes[index] ??\n\t\t\t\tparseSize(panels[index].props.defaultSize, trackSize, trackSize / panels.length);\n\t\t\tconst restoredSize = clamp(initialSize, getPanelMin(index), getPanelMax(index));\n\t\t\tnextSizes[index] = restoredSize;\n\t\t\tnextSizes[neighborIndex] = Math.max(0, nextSizes[neighborIndex] - nextSizes[index]);\n\t\t}\n\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst resetSizes = () => {\n\t\tconst previousCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tconst nextSizes = buildInitialSizes();\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tif (currentCollapsed.some((c, i) => c !== previousCollapsed[i])) {\n\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t}\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst rootStyle: CSSProperties = {\n\t\tborder: '1px solid #f0f0f0',\n\t\tborderRadius: 8,\n\t\tboxSizing: 'border-box',\n\t\tdisplay: 'flex',\n\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\theight: 360,\n\t\tminHeight: 0,\n\t\toverflow: 'hidden',\n\t\tposition: 'relative',\n\t\twidth: '100%',\n\t\t...semanticStyles.root,\n\t\t...style,\n\t};\n\n\tconst renderCollapseButton = (\n\t\tdraggerIndex: number,\n\t\tpanelIndex: number,\n\t\tdirection: 'start' | 'end',\n\t) => {\n\t\tconst panel = panels[panelIndex];\n\t\tconst config = getCollapsibleConfig(panel?.props.collapsible);\n\t\tconst isAllowed = direction === 'start' ? config.start : config.end;\n\n\t\tif (!isAllowed || config.showCollapsibleIcon === false) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst neighborIndex = direction === 'start' ? panelIndex + 1 : panelIndex - 1;\n\t\tconst isCollapsed = (sizes[panelIndex] ?? 0) <= 1;\n\t\tconst isNeighborCollapsed = (sizes[neighborIndex] ?? 0) <= 1;\n\n\t\t// 自己折叠后隐藏;对侧面板折叠后也隐藏(避免与展开按钮重复/语义冲突)\n\t\tif (isCollapsed || isNeighborCollapsed) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// 展开时箭头指向面板将被折叠到的方向\n\t\tconst Icon =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? LeftOutlined\n\t\t\t\t\t: RightOutlined\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? UpOutlined\n\t\t\t\t\t: DownOutlined;\n\n\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\t\tconst isAlwaysShow = config.showCollapsibleIcon === true;\n\t\tconst isHoveredOrDragging = hoveredIndex === draggerIndex || draggingIndex === draggerIndex;\n\t\tconst opacity = isAlwaysShow || isHoveredOrDragging ? 1 : 0;\n\t\tconst pointerEvents = isAlwaysShow || isHoveredOrDragging ? 'auto' : 'none';\n\n\t\tconst buttonTitle =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? '折叠左侧面板'\n\t\t\t\t\t: '折叠右侧面板'\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? '折叠上方面板'\n\t\t\t\t\t: '折叠下方面板';\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\taria-label={buttonTitle}\n\t\t\t\ttitle={buttonTitle}\n\t\t\t\tonClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\ttoggleCollapse(panelIndex, neighborIndex);\n\t\t\t\t}}\n\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}}\n\t\t\t\tstyle={{\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\tborder: '1px solid #d9d9d9',\n\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tfontSize: 10,\n\t\t\t\t\tboxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\topacity,\n\t\t\t\t\tpointerEvents,\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(panelIndex);\n\t\t\t\t}}\n\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#fff';\n\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Icon />\n\t\t\t</button>\n\t\t);\n\t};\n\n\tconst rootClassName = [className, semanticClassNames.root].filter(Boolean).join(' ') || undefined;\n\n\treturn (\n\t\t<div className={rootClassName} ref={rootRef} style={rootStyle}>\n\t\t\t{panels.map((panel, index) => {\n\t\t\t\tconst isHidden = sizes[index] <= 1;\n\t\t\t\tconst isLeftOrTopCollapsed = (sizes[index] ?? 0) <= 1;\n\t\t\t\tconst isRightOrBottomCollapsed = (sizes[index + 1] ?? 0) <= 1;\n\t\t\t\tconst isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;\n\t\t\t\tconst panelDestroyOnHidden = panel.props.destroyOnHidden ?? destroyOnHidden;\n\t\t\t\tconst shouldRenderContent = !isHidden || !panelDestroyOnHidden;\n\n\t\t\t\treturn (\n\t\t\t\t\t<React.Fragment key={index}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t[semanticClassNames.panel, panel.props.className].filter(Boolean).join(' ') ||\n\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackground: index % 2 ? '#fff' : '#fafafa',\n\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\tflex: `0 0 ${sizes[index] ?? 0}px`,\n\t\t\t\t\t\t\t\tminHeight: 0,\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\tboxShadow:\n\t\t\t\t\t\t\t\t\thoveredCollapsePanelIndex === index ? 'inset 0 0 0 2px #1677ff' : undefined,\n\t\t\t\t\t\t\t\ttransition:\n\t\t\t\t\t\t\t\t\tdraggingIndex === null ? 'box-shadow 0.2s ease, flex-basis 0.2s ease' : undefined,\n\t\t\t\t\t\t\t\t...semanticStyles.panel,\n\t\t\t\t\t\t\t\t...panel.props.style,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{shouldRenderContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\t\tdisplay: isHidden ? 'none' : 'block',\n\t\t\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t\t\t\t\t\tpadding: (sizes[index] ?? 0) < 32 ? 0 : 16,\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{panel.props.children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{index < panels.length - 1 && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\taria-orientation={resolvedOrientation}\n\t\t\t\t\t\t\t\tclassName={semanticClassNames.dragger}\n\t\t\t\t\t\t\t\tonDoubleClick={() => {\n\t\t\t\t\t\t\t\t\tonDraggerDoubleClick?.(index);\n\t\t\t\t\t\t\t\t\tresetSizes();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\t\tconst step = event.shiftKey ? 40 : 10;\n\t\t\t\t\t\t\t\t\tconst directionMap =\n\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? { ArrowLeft: -step, ArrowRight: step }\n\t\t\t\t\t\t\t\t\t\t\t: { ArrowUp: -step, ArrowDown: step };\n\t\t\t\t\t\t\t\t\tconst delta = directionMap[event.key as keyof typeof directionMap];\n\t\t\t\t\t\t\t\t\tif (delta !== undefined) {\n\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\tresizePair(index, delta);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonPointerDown={(event) => startResize(index, event)}\n\t\t\t\t\t\t\t\tonPointerEnter={() => setHoveredIndex(index)}\n\t\t\t\t\t\t\t\tonPointerLeave={() => setHoveredIndex(null)}\n\t\t\t\t\t\t\t\trole=\"separator\"\n\t\t\t\t\t\t\t\ttitle=\"拖动调整大小,双击重置\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#e6f4ff' : '#f5f5f5',\n\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\tcursor: resolvedOrientation === 'horizontal' ? 'col-resize' : 'row-resize',\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\tflex: `0 0 ${draggerSize}px`,\n\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\toutline: 'none',\n\t\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\tzIndex: isAnyCollapsed ? 2 : 1,\n\t\t\t\t\t\t\t\t\t...semanticStyles.dragger,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* 呈现拖拽指示线/图标 */}\n\t\t\t\t\t\t\t\t{(hoveredIndex === index || draggingIndex === index || !isAnyCollapsed) &&\n\t\t\t\t\t\t\t\t\t(draggerIcon ? (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#8c8c8c',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'color 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{draggerIcon}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#d9d9d9',\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\t\t\t\t\theight: resolvedOrientation === 'horizontal' ? 40 : 2,\n\t\t\t\t\t\t\t\t\t\t\t\twidth: resolvedOrientation === 'horizontal' ? 2 : 40,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t\t\t{/* 未折叠状态下呈现折叠按钮 */}\n\t\t\t\t\t\t\t\t{!isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop: '50%',\n\t\t\t\t\t\t\t\t\t\t\tleft: '50%',\n\t\t\t\t\t\t\t\t\t\t\ttransform: 'translate(-50%, -50%)',\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index, 'start')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-start',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index + 1, 'end')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* 折叠状态下呈现展开按钮(常态保持显示,精准垂直居中) */}\n\t\t\t\t\t\t\t\t{isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? '50%'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tbottom:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tleft:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: '50%',\n\t\t\t\t\t\t\t\t\t\t\tright:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'auto',\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `translate(${isLeftOrTopCollapsed ? '4px' : '-4px'}, -50%)`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `translate(-50%, ${isLeftOrTopCollapsed ? '4px' : '-4px'})`,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\t\t\tconst targetIndex = isLeftOrTopCollapsed ? index : index + 1;\n\t\t\t\t\t\t\t\t\t\t\tconst targetPanel = panels[targetIndex];\n\t\t\t\t\t\t\t\t\t\t\tconst config = getCollapsibleConfig(targetPanel?.props.collapsible);\n\t\t\t\t\t\t\t\t\t\t\tif (config.showCollapsibleIcon === false) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tconst ExpandIcon =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? RightOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: LeftOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? DownOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: UpOutlined;\n\n\t\t\t\t\t\t\t\t\t\t\tconst neighborIndex = isLeftOrTopCollapsed ? index + 1 : index;\n\t\t\t\t\t\t\t\t\t\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\n\t\t\t\t\t\t\t\t\t\t\tconst expandTitle =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开左侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开右侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开上方面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开下方面板';\n\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleCollapse(targetIndex, neighborIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: '#f3f4f6',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: '1px solid #e5e7eb',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 1px 3px rgba(0, 0, 0, 0.08)',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(targetIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#f3f4f6';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ExpandIcon />\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})()}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nCustomSplitter.Panel = SplitterPanel;\n\nexport default CustomSplitter;\n"],"mappings":"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","names":["import_jsx_runtime","import_react","import_jsx_runtime","React"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -29,6 +29,8 @@ type SplitterCollapsible = boolean | {
|
|
|
29
29
|
type SplitterPanelProps = {
|
|
30
30
|
/** 面板内容节点 */
|
|
31
31
|
children?: ReactNode;
|
|
32
|
+
/** 面板自定义类名 */
|
|
33
|
+
className?: string;
|
|
32
34
|
/**
|
|
33
35
|
* 折叠配置:
|
|
34
36
|
* - `boolean`: 是否允许两端折叠
|
|
@@ -51,17 +53,22 @@ type SplitterPanelProps = {
|
|
|
51
53
|
style?: CSSProperties;
|
|
52
54
|
};
|
|
53
55
|
type SplitterSemanticDOM = 'root' | 'panel' | 'dragger';
|
|
54
|
-
type
|
|
56
|
+
type SplitterStyles = Partial<Record<SplitterSemanticDOM, CSSProperties>> | ((info: {
|
|
57
|
+
props: SplitterProps;
|
|
58
|
+
}) => Partial<Record<SplitterSemanticDOM, CSSProperties>>);
|
|
59
|
+
type SplitterClassNames = Partial<Record<SplitterSemanticDOM, string>> | ((info: {
|
|
55
60
|
props: SplitterProps;
|
|
56
|
-
}) => Partial<Record<SplitterSemanticDOM,
|
|
61
|
+
}) => Partial<Record<SplitterSemanticDOM, string>>);
|
|
57
62
|
/**
|
|
58
63
|
* Splitter 根容器组件属性
|
|
59
64
|
*/
|
|
60
65
|
type SplitterProps = {
|
|
61
|
-
/**
|
|
62
|
-
children
|
|
66
|
+
/** 面板集合(建议传入 Splitter.Panel) */
|
|
67
|
+
children?: ReactNode;
|
|
63
68
|
/** 容器根节点自定义类名 */
|
|
64
69
|
className?: string;
|
|
70
|
+
/** 用于自定义组件内部各语义化结构(root、panel、dragger)的 class,支持对象或函数 */
|
|
71
|
+
classNames?: SplitterClassNames;
|
|
65
72
|
/** 折叠/隐藏时是否销毁面板内容节点(默认 false,保留组件状态) */
|
|
66
73
|
destroyOnHidden?: boolean;
|
|
67
74
|
/** 拖拽分隔条的宽度/高度(单位 px,默认 4) */
|
|
@@ -80,9 +87,11 @@ type SplitterProps = {
|
|
|
80
87
|
onDraggerDoubleClick?: (index: number) => void;
|
|
81
88
|
/** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */
|
|
82
89
|
orientation?: SplitterOrientation;
|
|
90
|
+
/** 容器根节点自定义 CSS 样式 */
|
|
91
|
+
style?: CSSProperties;
|
|
83
92
|
/** 容器根节点及各语义化结构(root、panel、dragger)自定义 CSS 样式,支持对象或函数 */
|
|
84
|
-
|
|
85
|
-
/** 是否垂直分屏(orientation="vertical" 的简写形式) */
|
|
93
|
+
styles?: SplitterStyles;
|
|
94
|
+
/** 是否垂直分屏(orientation="vertical" 的简写形式) 排列方向,与 orientation 同时存在,以 orientation 优先 */
|
|
86
95
|
vertical?: boolean;
|
|
87
96
|
/** 自定义拖拽手柄图标/节点 */
|
|
88
97
|
draggerIcon?: ReactNode;
|
package/dist/index.d.ts
CHANGED
|
@@ -29,6 +29,8 @@ type SplitterCollapsible = boolean | {
|
|
|
29
29
|
type SplitterPanelProps = {
|
|
30
30
|
/** 面板内容节点 */
|
|
31
31
|
children?: ReactNode;
|
|
32
|
+
/** 面板自定义类名 */
|
|
33
|
+
className?: string;
|
|
32
34
|
/**
|
|
33
35
|
* 折叠配置:
|
|
34
36
|
* - `boolean`: 是否允许两端折叠
|
|
@@ -51,17 +53,22 @@ type SplitterPanelProps = {
|
|
|
51
53
|
style?: CSSProperties;
|
|
52
54
|
};
|
|
53
55
|
type SplitterSemanticDOM = 'root' | 'panel' | 'dragger';
|
|
54
|
-
type
|
|
56
|
+
type SplitterStyles = Partial<Record<SplitterSemanticDOM, CSSProperties>> | ((info: {
|
|
57
|
+
props: SplitterProps;
|
|
58
|
+
}) => Partial<Record<SplitterSemanticDOM, CSSProperties>>);
|
|
59
|
+
type SplitterClassNames = Partial<Record<SplitterSemanticDOM, string>> | ((info: {
|
|
55
60
|
props: SplitterProps;
|
|
56
|
-
}) => Partial<Record<SplitterSemanticDOM,
|
|
61
|
+
}) => Partial<Record<SplitterSemanticDOM, string>>);
|
|
57
62
|
/**
|
|
58
63
|
* Splitter 根容器组件属性
|
|
59
64
|
*/
|
|
60
65
|
type SplitterProps = {
|
|
61
|
-
/**
|
|
62
|
-
children
|
|
66
|
+
/** 面板集合(建议传入 Splitter.Panel) */
|
|
67
|
+
children?: ReactNode;
|
|
63
68
|
/** 容器根节点自定义类名 */
|
|
64
69
|
className?: string;
|
|
70
|
+
/** 用于自定义组件内部各语义化结构(root、panel、dragger)的 class,支持对象或函数 */
|
|
71
|
+
classNames?: SplitterClassNames;
|
|
65
72
|
/** 折叠/隐藏时是否销毁面板内容节点(默认 false,保留组件状态) */
|
|
66
73
|
destroyOnHidden?: boolean;
|
|
67
74
|
/** 拖拽分隔条的宽度/高度(单位 px,默认 4) */
|
|
@@ -80,9 +87,11 @@ type SplitterProps = {
|
|
|
80
87
|
onDraggerDoubleClick?: (index: number) => void;
|
|
81
88
|
/** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */
|
|
82
89
|
orientation?: SplitterOrientation;
|
|
90
|
+
/** 容器根节点自定义 CSS 样式 */
|
|
91
|
+
style?: CSSProperties;
|
|
83
92
|
/** 容器根节点及各语义化结构(root、panel、dragger)自定义 CSS 样式,支持对象或函数 */
|
|
84
|
-
|
|
85
|
-
/** 是否垂直分屏(orientation="vertical" 的简写形式) */
|
|
93
|
+
styles?: SplitterStyles;
|
|
94
|
+
/** 是否垂直分屏(orientation="vertical" 的简写形式) 排列方向,与 orientation 同时存在,以 orientation 优先 */
|
|
86
95
|
vertical?: boolean;
|
|
87
96
|
/** 自定义拖拽手柄图标/节点 */
|
|
88
97
|
draggerIcon?: ReactNode;
|
package/dist/index.js
CHANGED
|
@@ -212,24 +212,25 @@ var parseSize = (value, total, fallback) => {
|
|
|
212
212
|
var roundSizes = (sizes) => sizes.map((size) => Math.round(size));
|
|
213
213
|
var getPointerPosition = (event, orientation) => orientation === "horizontal" ? event.clientX : event.clientY;
|
|
214
214
|
var clamp = (value, min, max) => Math.min(Math.max(value, min), max);
|
|
215
|
-
var resolveSemanticStyles = (
|
|
216
|
-
if (!
|
|
215
|
+
var resolveSemanticStyles = (styles, infoProps) => {
|
|
216
|
+
if (!styles) {
|
|
217
217
|
return {};
|
|
218
218
|
}
|
|
219
|
-
const resolved = typeof
|
|
220
|
-
|
|
219
|
+
const resolved = typeof styles === "function" ? styles({ props: infoProps }) : styles;
|
|
220
|
+
return resolved || {};
|
|
221
|
+
};
|
|
222
|
+
var resolveSemanticClassNames = (classNames, infoProps) => {
|
|
223
|
+
if (!classNames) {
|
|
221
224
|
return {};
|
|
222
225
|
}
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
return resolved;
|
|
226
|
-
}
|
|
227
|
-
return { root: resolved };
|
|
226
|
+
const resolved = typeof classNames === "function" ? classNames({ props: infoProps }) : classNames;
|
|
227
|
+
return resolved || {};
|
|
228
228
|
};
|
|
229
229
|
var CustomSplitter = (props) => {
|
|
230
230
|
const {
|
|
231
231
|
children,
|
|
232
232
|
className,
|
|
233
|
+
classNames,
|
|
233
234
|
destroyOnHidden = false,
|
|
234
235
|
draggerIcon,
|
|
235
236
|
draggerSize = DEFAULT_DRAGGER_SIZE,
|
|
@@ -241,6 +242,7 @@ var CustomSplitter = (props) => {
|
|
|
241
242
|
onDraggerDoubleClick,
|
|
242
243
|
orientation,
|
|
243
244
|
style,
|
|
245
|
+
styles,
|
|
244
246
|
vertical = false
|
|
245
247
|
} = props;
|
|
246
248
|
const resolvedOrientation = orientation != null ? orientation : vertical ? "vertical" : "horizontal";
|
|
@@ -251,7 +253,11 @@ var CustomSplitter = (props) => {
|
|
|
251
253
|
const [hoveredIndex, setHoveredIndex] = useState2(null);
|
|
252
254
|
const [hoveredCollapsePanelIndex, setHoveredCollapsePanelIndex] = useState2(null);
|
|
253
255
|
const [sizes, setSizes] = useState2([]);
|
|
254
|
-
const semanticStyles = useMemo(() => resolveSemanticStyles(
|
|
256
|
+
const semanticStyles = useMemo(() => resolveSemanticStyles(styles, props), [styles, props]);
|
|
257
|
+
const semanticClassNames = useMemo(
|
|
258
|
+
() => resolveSemanticClassNames(classNames, props),
|
|
259
|
+
[classNames, props]
|
|
260
|
+
);
|
|
255
261
|
const panels = useMemo(
|
|
256
262
|
() => React.Children.toArray(children).filter(
|
|
257
263
|
React.isValidElement
|
|
@@ -455,7 +461,8 @@ var CustomSplitter = (props) => {
|
|
|
455
461
|
overflow: "hidden",
|
|
456
462
|
position: "relative",
|
|
457
463
|
width: "100%",
|
|
458
|
-
...semanticStyles.root
|
|
464
|
+
...semanticStyles.root,
|
|
465
|
+
...style
|
|
459
466
|
};
|
|
460
467
|
const renderCollapseButton = (draggerIndex, panelIndex, direction) => {
|
|
461
468
|
var _a, _b;
|
|
@@ -523,7 +530,8 @@ var CustomSplitter = (props) => {
|
|
|
523
530
|
}
|
|
524
531
|
);
|
|
525
532
|
};
|
|
526
|
-
|
|
533
|
+
const rootClassName = [className, semanticClassNames.root].filter(Boolean).join(" ") || void 0;
|
|
534
|
+
return /* @__PURE__ */ jsx3("div", { className: rootClassName, ref: rootRef, style: rootStyle, children: panels.map((panel, index) => {
|
|
527
535
|
var _a, _b, _c, _d, _e;
|
|
528
536
|
const isHidden = sizes[index] <= 1;
|
|
529
537
|
const isLeftOrTopCollapsed = ((_a = sizes[index]) != null ? _a : 0) <= 1;
|
|
@@ -535,6 +543,7 @@ var CustomSplitter = (props) => {
|
|
|
535
543
|
/* @__PURE__ */ jsx3(
|
|
536
544
|
"div",
|
|
537
545
|
{
|
|
546
|
+
className: [semanticClassNames.panel, panel.props.className].filter(Boolean).join(" ") || void 0,
|
|
538
547
|
style: {
|
|
539
548
|
background: index % 2 ? "#fff" : "#fafafa",
|
|
540
549
|
boxSizing: "border-box",
|
|
@@ -568,6 +577,7 @@ var CustomSplitter = (props) => {
|
|
|
568
577
|
"div",
|
|
569
578
|
{
|
|
570
579
|
"aria-orientation": resolvedOrientation,
|
|
580
|
+
className: semanticClassNames.dragger,
|
|
571
581
|
onDoubleClick: () => {
|
|
572
582
|
onDraggerDoubleClick == null ? void 0 : onDraggerDoubleClick(index);
|
|
573
583
|
resetSizes();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../CollapseBox/index.tsx","../src/icons.tsx","../Splitter/index.tsx"],"sourcesContent":["import { useState, type CSSProperties, type ReactNode } from 'react';\nimport { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport './index.less';\n\nexport type CollapseBoxDirection = 'horizontal' | 'vertical';\nexport type CollapseBoxButtonPosition = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface CollapseBoxProps {\n\tchildren?: ReactNode;\n\ttitle?: string;\n\tdirection?: CollapseBoxDirection;\n\tbuttonPosition?: CollapseBoxButtonPosition;\n\tdefaultWidth?: number | string;\n\tdefaultHeight?: number | string;\n\tcontentPadding?: string;\n\theaderHeight?: number;\n\tclassName?: string;\n}\n\nconst formatDimension = (value?: number | string): string | undefined => {\n\tif (value === undefined || value === null) return undefined;\n\treturn typeof value === 'number' ? `${value}px` : value;\n};\n\nconst ChevronLeft = () => <LeftOutlined />;\n\nconst ChevronRight = () => <RightOutlined />;\n\nconst ChevronUp = () => <UpOutlined />;\n\nconst ChevronDown = () => <DownOutlined />;\n\nconst CollapsibleBox = ({\n\tchildren,\n\ttitle = '内容区域',\n\tdirection = 'horizontal',\n\tbuttonPosition = 'right',\n\tdefaultWidth = 600,\n\tdefaultHeight = 300,\n\tcontentPadding = '16px',\n\theaderHeight = 16,\n\tclassName,\n}: CollapseBoxProps) => {\n\tconst [isExpanded, setIsExpanded] = useState(true);\n\n\tconst getContentMaxHeight = () => {\n\t\tif (typeof defaultHeight === 'number') {\n\t\t\treturn `${defaultHeight - headerHeight}px`;\n\t\t}\n\t\tif (typeof defaultHeight === 'string') {\n\t\t\treturn headerHeight ? `calc(${defaultHeight} - ${headerHeight}px)` : defaultHeight;\n\t\t}\n\t\treturn '100%';\n\t};\n\n\tconst getIcon = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\tif (buttonPosition === 'right') {\n\t\t\t\treturn isExpanded ? <ChevronRight /> : <ChevronLeft />;\n\t\t\t} else {\n\t\t\t\treturn isExpanded ? <ChevronLeft /> : <ChevronRight />;\n\t\t\t}\n\t\t} else {\n\t\t\tif (buttonPosition === 'bottom') {\n\t\t\t\treturn isExpanded ? <ChevronUp /> : <ChevronDown />;\n\t\t\t} else {\n\t\t\t\treturn isExpanded ? <ChevronDown /> : <ChevronUp />;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst getButtonClass = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\treturn buttonPosition === 'right' ? 'button-right' : 'button-left';\n\t\t} else {\n\t\t\treturn buttonPosition === 'bottom' ? 'button-bottom' : 'button-top';\n\t\t}\n\t};\n\n\tconst getContainerStyle = (): CSSProperties => {\n\t\tconst resolvedHeight = formatDimension(defaultHeight);\n\t\tconst resolvedWidth = formatDimension(defaultWidth);\n\t\tif (direction === 'horizontal') {\n\t\t\treturn {\n\t\t\t\twidth: isExpanded ? resolvedWidth : '0px',\n\t\t\t\theight: resolvedHeight,\n\t\t\t\tminWidth: 0,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\theight: isExpanded ? resolvedHeight : '0px',\n\t\t\t\twidth: resolvedWidth,\n\t\t\t\tminHeight: 0,\n\t\t\t};\n\t\t}\n\t};\n\n\tconst baseWrapperClass =\n\t\tdirection === 'horizontal' ? 'collapsible-wrapper horizontal' : 'collapsible-wrapper vertical';\n\tconst wrapperClass = className ? `${baseWrapperClass} ${className}` : baseWrapperClass;\n\n\tconst containerClass =\n\t\tdirection === 'horizontal' && buttonPosition === 'right'\n\t\t\t? 'collapsible-container align-right'\n\t\t\t: 'collapsible-container';\n\tconst height = getContentMaxHeight();\n\tconst contentStyle: CSSProperties = {\n\t\tmaxHeight: direction === 'vertical' ? (isExpanded ? height : '0px') : height,\n\t\toverflowY: 'auto',\n\t\tpadding: direction === 'vertical' && !isExpanded ? '0px' : contentPadding,\n\t\tboxSizing: 'border-box',\n\t};\n\n\t// 折叠时(纵向 + 底部按钮):按钮需切换为 top:0 定位,使其显示在折叠线下方\n\tconst buttonStyle: CSSProperties =\n\t\tdirection === 'vertical' && buttonPosition === 'bottom' && !isExpanded\n\t\t\t? { top: '0px', bottom: 'auto' }\n\t\t\t: {};\n\n\t// 让 wrapper 高度跟随容器,确保 bottom:0 的按钮贴住容器底部\n\t// 折叠时 wrapper 高度为 0,配合按钮的 translateY(-100%) 让按钮显示在折叠线上方\n\tconst formattedWidth = formatDimension(defaultWidth);\n\tconst formattedHeight = formatDimension(defaultHeight);\n\tconst wrapperStyle: CSSProperties | undefined =\n\t\tdirection === 'vertical'\n\t\t\t? isExpanded\n\t\t\t\t? {\n\t\t\t\t\t\theight: formattedHeight,\n\t\t\t\t\t\twidth: formattedWidth,\n\t\t\t\t\t}\n\t\t\t\t: { height: 0, width: formattedWidth }\n\t\t\t: undefined;\n\n\treturn (\n\t\t<div className={wrapperClass} style={wrapperStyle}>\n\t\t\t<div style={getContainerStyle()} className={containerClass}>\n\t\t\t\t{title && (\n\t\t\t\t\t<div className=\"collapsible-header\" style={{ display: 'none' }}>\n\t\t\t\t\t\t<h3>{title}</h3>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"collapsible-content\" style={contentStyle}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tonClick={() => setIsExpanded(!isExpanded)}\n\t\t\t\tclassName={`toggle-button ${getButtonClass()}`}\n\t\t\t\tstyle={buttonStyle}\n\t\t\t\ttitle={isExpanded ? '隐藏' : '展开'}\n\t\t\t>\n\t\t\t\t{getIcon()}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default CollapsibleBox;\n","import type { CSSProperties } from 'react';\n\ninterface IconProps {\n\tstyle?: CSSProperties;\n\tclassName?: string;\n}\n\nconst baseStyle: CSSProperties = {\n\tdisplay: 'inline-block',\n\twidth: '1em',\n\theight: '1em',\n\tverticalAlign: '-0.125em',\n};\n\nexport const LeftOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"left\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z\" />\n\t</svg>\n);\n\nexport const RightOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"right\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z\" />\n\t</svg>\n);\n\nexport const UpOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"up\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M890.5 755.3L537.4 268a31.96 31.96 0 00-50.8 0L133.5 755.3a7.95 7.95 0 006.3 12.7h75.5c4.9 0 9.6-2.3 12.6-6.1l281-360 281 360c3 3.8 7.7 6.1 12.6 6.1h75.5c6.7 0 10.4-7.6 6.1-12.7z\" />\n\t</svg>\n);\n\nexport const DownOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"down\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 37 17.6 49.8 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\" />\n\t</svg>\n);\n","import { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport type {\n\tCSSProperties,\n\tReactElement,\n\tReactNode,\n\tPointerEvent as ReactPointerEvent,\n} from 'react';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nexport type SplitterSize = number | `${number}%`;\nexport type SplitterOrientation = 'horizontal' | 'vertical';\n\nexport type SplitterCollapsible =\n\t| boolean\n\t| {\n\t\t\tstart?: boolean;\n\t\t\tend?: boolean;\n\t\t\tshowCollapsibleIcon?: boolean | 'auto';\n\t };\n\n/**\n * Splitter.Panel 子面板组件属性\n */\nexport type SplitterPanelProps = {\n\t/** 面板内容节点 */\n\tchildren?: ReactNode;\n\t/**\n\t * 折叠配置:\n\t * - `boolean`: 是否允许两端折叠\n\t * - `Object`: `{ start?: boolean; end?: boolean; showCollapsibleIcon?: boolean | 'auto' }`\n\t */\n\tcollapsible?: SplitterCollapsible;\n\t/** 面板初始默认尺寸(支持数字 px 或百分比字符串如 '40%') */\n\tdefaultSize?: SplitterSize;\n\t/** 折叠/隐藏时是否销毁面板内容节点(可覆盖 Splitter 根容器上的 destroyOnHidden 属性) */\n\tdestroyOnHidden?: boolean;\n\t/** 面板最大允许尺寸限制 */\n\tmax?: SplitterSize;\n\t/** 面板最小允许尺寸限制 */\n\tmin?: SplitterSize;\n\t/** 是否允许通过分隔条拖拽调整大小(默认 true) */\n\tresizable?: boolean;\n\t/** 面板受控尺寸 */\n\tsize?: SplitterSize;\n\t/** 面板自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n};\n\nexport type SplitterSemanticDOM = 'root' | 'panel' | 'dragger';\n/** 语义化 DOM 结构标识 */\nexport type SemanticDOM = SplitterSemanticDOM;\n\nexport type SplitterStyle =\n\t| CSSProperties\n\t| Partial<Record<SplitterSemanticDOM, CSSProperties>>\n\t| ((info: {\n\t\t\tprops: SplitterProps;\n\t }) => Partial<Record<SplitterSemanticDOM, CSSProperties>> | CSSProperties);\n\n/**\n * Splitter 根容器组件属性\n */\nexport type SplitterProps = {\n\t/** 面板集合(必须为 Splitter.Panel) */\n\tchildren: ReactNode;\n\t/** 容器根节点自定义类名 */\n\tclassName?: string;\n\t/** 折叠/隐藏时是否销毁面板内容节点(默认 false,保留组件状态) */\n\tdestroyOnHidden?: boolean;\n\t/** 拖拽分隔条的宽度/高度(单位 px,默认 4) */\n\tdraggerSize?: number;\n\t/** 是否在拖拽结束时才更新视图(默认 false) */\n\tlazy?: boolean;\n\t/** 面板展开或折叠状态改变时的回调 */\n\tonCollapse?: (collapsed: boolean[], sizes: number[]) => void;\n\t/** 拖拽过程中的实时尺寸变化回调 */\n\tonResize?: (sizes: number[]) => void;\n\t/** 拖拽结束、重置尺寸或折叠完成时的回调 */\n\tonResizeEnd?: (sizes: number[]) => void;\n\t/** 开始拖拽分隔条时的回调 */\n\tonResizeStart?: (sizes: number[]) => void;\n\t/** 双击拖拽条回调 */\n\tonDraggerDoubleClick?: (index: number) => void;\n\t/** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */\n\torientation?: SplitterOrientation;\n\t/** 容器根节点及各语义化结构(root、panel、dragger)自定义 CSS 样式,支持对象或函数 */\n\tstyle?: SplitterStyle;\n\t/** 是否垂直分屏(orientation=\"vertical\" 的简写形式) */\n\tvertical?: boolean;\n\t/** 自定义拖拽手柄图标/节点 */\n\tdraggerIcon?: ReactNode;\n};\n\nexport interface ResolvedCollapsible {\n\tstart: boolean;\n\tend: boolean;\n\tshowCollapsibleIcon: boolean | 'auto';\n}\n\nconst getCollapsibleConfig = (collapsible?: SplitterCollapsible): ResolvedCollapsible => {\n\tif (!collapsible) {\n\t\treturn { start: false, end: false, showCollapsibleIcon: 'auto' };\n\t}\n\tif (typeof collapsible === 'boolean') {\n\t\treturn {\n\t\t\tstart: collapsible,\n\t\t\tend: collapsible,\n\t\t\tshowCollapsibleIcon: collapsible ? true : 'auto',\n\t\t};\n\t}\n\treturn {\n\t\tstart: collapsible.start ?? false,\n\t\tend: collapsible.end ?? false,\n\t\tshowCollapsibleIcon: collapsible.showCollapsibleIcon ?? true,\n\t};\n};\n\ntype SplitterComponent = React.FC<SplitterProps> & {\n\tPanel: React.FC<SplitterPanelProps>;\n};\n\nconst DEFAULT_DRAGGER_SIZE = 4;\nconst MIN_DRAG_SIZE = 40; // 手动拖拽调整大小时的默认最小限制 (px)\n\nconst SplitterPanel: React.FC<SplitterPanelProps> = ({ children }) => <>{children}</>;\n\nconst isPercentSize = (value: SplitterSize): value is `${number}%` =>\n\ttypeof value === 'string' && value.endsWith('%');\n\nconst parseSize = (value: SplitterSize | undefined, total: number, fallback: number) => {\n\tif (value === undefined) {\n\t\treturn fallback;\n\t}\n\n\tif (isPercentSize(value)) {\n\t\treturn (Number.parseFloat(value) / 100) * total;\n\t}\n\n\treturn Number(value);\n};\n\nconst roundSizes = (sizes: number[]) => sizes.map((size) => Math.round(size));\n\nconst getPointerPosition = (\n\tevent: PointerEvent | ReactPointerEvent,\n\torientation: SplitterOrientation,\n) => (orientation === 'horizontal' ? event.clientX : event.clientY);\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveSemanticStyles = (\n\tstyle: SplitterStyle | undefined,\n\tinfoProps: SplitterProps,\n): Partial<Record<SplitterSemanticDOM, CSSProperties>> => {\n\tif (!style) {\n\t\treturn {};\n\t}\n\n\tconst resolved = typeof style === 'function' ? style({ props: infoProps }) : style;\n\tif (!resolved) {\n\t\treturn {};\n\t}\n\n\tconst hasSemanticKey = 'root' in resolved || 'panel' in resolved || 'dragger' in resolved;\n\n\tif (hasSemanticKey) {\n\t\treturn resolved as Partial<Record<SplitterSemanticDOM, CSSProperties>>;\n\t}\n\n\treturn { root: resolved as CSSProperties };\n};\n\nconst CustomSplitter: SplitterComponent = (props) => {\n\tconst {\n\t\tchildren,\n\t\tclassName,\n\t\tdestroyOnHidden = false,\n\t\tdraggerIcon,\n\t\tdraggerSize = DEFAULT_DRAGGER_SIZE,\n\t\tlazy = false,\n\t\tonResize,\n\t\tonResizeEnd,\n\t\tonResizeStart,\n\t\tonCollapse,\n\t\tonDraggerDoubleClick,\n\t\torientation,\n\t\tstyle,\n\t\tvertical = false,\n\t} = props;\n\tconst resolvedOrientation = orientation ?? (vertical ? 'vertical' : 'horizontal');\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\tconst sizesRef = useRef<number[]>([]);\n\tconst [containerSize, setContainerSize] = useState(0);\n\tconst [draggingIndex, setDraggingIndex] = useState<number | null>(null);\n\tconst [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n\tconst [hoveredCollapsePanelIndex, setHoveredCollapsePanelIndex] = useState<number | null>(null);\n\tconst [sizes, setSizes] = useState<number[]>([]);\n\n\tconst semanticStyles = useMemo(() => resolveSemanticStyles(style, props), [style, props]);\n\n\tconst panels = useMemo(\n\t\t() =>\n\t\t\tReact.Children.toArray(children).filter(\n\t\t\t\tReact.isValidElement,\n\t\t\t) as ReactElement<SplitterPanelProps>[],\n\t\t[children],\n\t);\n\n\tconst trackSize = Math.max(0, containerSize - Math.max(0, panels.length - 1) * draggerSize);\n\n\tconst getPanelMin = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.min, trackSize, 0),\n\t\t[panels, trackSize],\n\t);\n\n\tconst getPanelMax = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.max, trackSize, trackSize),\n\t\t[panels, trackSize],\n\t);\n\n\tconst normalizeToTrack = useCallback(\n\t\t(nextSizes: number[]) => {\n\t\t\tif (!trackSize || !nextSizes.length) {\n\t\t\t\treturn nextSizes;\n\t\t\t}\n\n\t\t\tconst normalized = [...nextSizes];\n\t\t\tconst diff = trackSize - normalized.reduce((sum, size) => sum + size, 0);\n\t\t\tconst flexibleIndex = normalized.findIndex((size) => size > 0);\n\t\t\tif (flexibleIndex !== -1) {\n\t\t\t\tnormalized[flexibleIndex] += diff;\n\t\t\t}\n\n\t\t\treturn normalized.map((size, index) => {\n\t\t\t\t// 折叠状态(size <= 1)保持为 0,不受 min 限制干扰\n\t\t\t\tif (size <= 1) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\t// 拖拽过程从 0 拖出时,允许在 0 到 min 之间平滑过渡,不被强行跳变到 min\n\t\t\t\tif (size < getPanelMin(index)) {\n\t\t\t\t\treturn size;\n\t\t\t\t}\n\t\t\t\treturn clamp(size, getPanelMin(index), getPanelMax(index));\n\t\t\t});\n\t\t},\n\t\t[getPanelMax, getPanelMin, trackSize],\n\t);\n\n\tconst buildInitialSizes = useCallback(\n\t\t(previous?: number[]) => {\n\t\t\tif (!trackSize || !panels.length) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tif (previous?.length === panels.length) {\n\t\t\t\tconst previousTotal = previous.reduce((sum, size) => sum + size, 0);\n\t\t\t\tif (previousTotal > 0) {\n\t\t\t\t\treturn normalizeToTrack(previous.map((size) => (size / previousTotal) * trackSize));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst explicitSizes = panels.map((panel) =>\n\t\t\t\tparseSize(panel.props.size ?? panel.props.defaultSize, trackSize, -1),\n\t\t\t);\n\t\t\tconst usedSize = explicitSizes\n\t\t\t\t.filter((size) => size >= 0)\n\t\t\t\t.reduce((sum, size) => sum + size, 0);\n\t\t\tconst unsetCount = explicitSizes.filter((size) => size < 0).length;\n\t\t\tconst fallbackSize = unsetCount ? Math.max(0, (trackSize - usedSize) / unsetCount) : 0;\n\n\t\t\treturn normalizeToTrack(\n\t\t\t\texplicitSizes.map((size, index) =>\n\t\t\t\t\tclamp(size >= 0 ? size : fallbackSize, getPanelMin(index), getPanelMax(index)),\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack, panels, trackSize],\n\t);\n\n\tconst updateSizes = useCallback(\n\t\t(nextSizes: number[], notify = true) => {\n\t\t\tconst normalized = normalizeToTrack(nextSizes);\n\t\t\tsetSizes(normalized);\n\t\t\tsizesRef.current = normalized;\n\t\t\tif (notify) {\n\t\t\t\tonResize?.(roundSizes(normalized));\n\t\t\t}\n\t\t},\n\t\t[normalizeToTrack, onResize],\n\t);\n\n\tuseEffect(() => {\n\t\tconst node = rootRef.current;\n\t\tif (!node) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst syncSize = () => {\n\t\t\tsetContainerSize(resolvedOrientation === 'horizontal' ? node.clientWidth : node.clientHeight);\n\t\t};\n\t\tsyncSize();\n\n\t\tconst observer = new ResizeObserver(syncSize);\n\t\tobserver.observe(node);\n\t\treturn () => observer.disconnect();\n\t}, [resolvedOrientation]);\n\n\tuseEffect(() => {\n\t\tsetSizes((previous) => {\n\t\t\tconst nextSizes = buildInitialSizes(previous);\n\t\t\tsizesRef.current = nextSizes;\n\t\t\treturn nextSizes;\n\t\t});\n\t}, [buildInitialSizes]);\n\n\tconst getResizedPair = useCallback(\n\t\t(sourceSizes: number[], index: number, delta: number) => {\n\t\t\tconst nextSizes = [...sourceSizes];\n\t\t\tconst isLeftCollapsed = sourceSizes[index] <= 1;\n\t\t\tconst isRightCollapsed = sourceSizes[index + 1] <= 1;\n\n\t\t\tconst leftMin = isLeftCollapsed ? 0 : getPanelMin(index);\n\t\t\tconst rightMin = isRightCollapsed ? 0 : getPanelMin(index + 1);\n\t\t\tconst leftMax = getPanelMax(index);\n\t\t\tconst rightMax = getPanelMax(index + 1);\n\n\t\t\tconst minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);\n\t\t\tconst maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);\n\t\t\tconst safeDelta = clamp(delta, minDelta, maxDelta);\n\n\t\t\tnextSizes[index] = sourceSizes[index] + safeDelta;\n\t\t\tnextSizes[index + 1] = sourceSizes[index + 1] - safeDelta;\n\t\t\treturn normalizeToTrack(nextSizes);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack],\n\t);\n\n\tconst resizePair = useCallback(\n\t\t(index: number, delta: number, notify = true) => {\n\t\t\tupdateSizes(getResizedPair(sizesRef.current, index, delta), notify);\n\t\t},\n\t\t[getResizedPair, updateSizes],\n\t);\n\n\tconst startResize = (index: number, event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (panels[index].props.resizable === false || panels[index + 1].props.resizable === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tconst startPosition = getPointerPosition(event, resolvedOrientation);\n\t\tconst startSizes = [...sizesRef.current];\n\t\tlet latestSizes = startSizes;\n\n\t\tsetDraggingIndex(index);\n\t\tonResizeStart?.(roundSizes(startSizes));\n\n\t\tconst handlePointerMove = (moveEvent: PointerEvent) => {\n\t\t\tconst delta = getPointerPosition(moveEvent, resolvedOrientation) - startPosition;\n\t\t\tlatestSizes = getResizedPair(startSizes, index, delta);\n\t\t\tif (!lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePointerUp = () => {\n\t\t\tdocument.removeEventListener('pointermove', handlePointerMove);\n\t\t\tdocument.removeEventListener('pointerup', handlePointerUp);\n\t\t\tsetDraggingIndex(null);\n\t\t\tif (lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\t\tconst startCollapsed = startSizes.map((size) => size <= 1);\n\t\t\tif (currentCollapsed.some((c, i) => c !== startCollapsed[i])) {\n\t\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t\t}\n\t\t\tonResizeEnd?.(currentSizes);\n\t\t};\n\n\t\tdocument.addEventListener('pointermove', handlePointerMove);\n\t\tdocument.addEventListener('pointerup', handlePointerUp);\n\t};\n\n\tconst toggleCollapse = (index: number, neighborIndex: number) => {\n\t\tconst nextSizes = [...sizesRef.current];\n\n\t\tif (nextSizes[index] > 1) {\n\t\t\tnextSizes[neighborIndex] += nextSizes[index];\n\t\t\tnextSizes[index] = 0;\n\t\t} else {\n\t\t\tconst initialSizes = buildInitialSizes();\n\t\t\tconst initialSize =\n\t\t\t\tinitialSizes[index] ??\n\t\t\t\tparseSize(panels[index].props.defaultSize, trackSize, trackSize / panels.length);\n\t\t\tconst restoredSize = clamp(initialSize, getPanelMin(index), getPanelMax(index));\n\t\t\tnextSizes[index] = restoredSize;\n\t\t\tnextSizes[neighborIndex] = Math.max(0, nextSizes[neighborIndex] - nextSizes[index]);\n\t\t}\n\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst resetSizes = () => {\n\t\tconst previousCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tconst nextSizes = buildInitialSizes();\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tif (currentCollapsed.some((c, i) => c !== previousCollapsed[i])) {\n\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t}\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst rootStyle: CSSProperties = {\n\t\tborder: '1px solid #f0f0f0',\n\t\tborderRadius: 8,\n\t\tboxSizing: 'border-box',\n\t\tdisplay: 'flex',\n\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\theight: 360,\n\t\tminHeight: 0,\n\t\toverflow: 'hidden',\n\t\tposition: 'relative',\n\t\twidth: '100%',\n\t\t...semanticStyles.root,\n\t};\n\n\tconst renderCollapseButton = (\n\t\tdraggerIndex: number,\n\t\tpanelIndex: number,\n\t\tdirection: 'start' | 'end',\n\t) => {\n\t\tconst panel = panels[panelIndex];\n\t\tconst config = getCollapsibleConfig(panel?.props.collapsible);\n\t\tconst isAllowed = direction === 'start' ? config.start : config.end;\n\n\t\tif (!isAllowed || config.showCollapsibleIcon === false) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst neighborIndex = direction === 'start' ? panelIndex + 1 : panelIndex - 1;\n\t\tconst isCollapsed = (sizes[panelIndex] ?? 0) <= 1;\n\t\tconst isNeighborCollapsed = (sizes[neighborIndex] ?? 0) <= 1;\n\n\t\t// 自己折叠后隐藏;对侧面板折叠后也隐藏(避免与展开按钮重复/语义冲突)\n\t\tif (isCollapsed || isNeighborCollapsed) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// 展开时箭头指向面板将被折叠到的方向\n\t\tconst Icon =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? LeftOutlined\n\t\t\t\t\t: RightOutlined\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? UpOutlined\n\t\t\t\t\t: DownOutlined;\n\n\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\t\tconst isAlwaysShow = config.showCollapsibleIcon === true;\n\t\tconst isHoveredOrDragging = hoveredIndex === draggerIndex || draggingIndex === draggerIndex;\n\t\tconst opacity = isAlwaysShow || isHoveredOrDragging ? 1 : 0;\n\t\tconst pointerEvents = isAlwaysShow || isHoveredOrDragging ? 'auto' : 'none';\n\n\t\tconst buttonTitle =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? '折叠左侧面板'\n\t\t\t\t\t: '折叠右侧面板'\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? '折叠上方面板'\n\t\t\t\t\t: '折叠下方面板';\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\taria-label={buttonTitle}\n\t\t\t\ttitle={buttonTitle}\n\t\t\t\tonClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\ttoggleCollapse(panelIndex, neighborIndex);\n\t\t\t\t}}\n\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}}\n\t\t\t\tstyle={{\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\tborder: '1px solid #d9d9d9',\n\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tfontSize: 10,\n\t\t\t\t\tboxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\topacity,\n\t\t\t\t\tpointerEvents,\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(panelIndex);\n\t\t\t\t}}\n\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#fff';\n\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Icon />\n\t\t\t</button>\n\t\t);\n\t};\n\n\treturn (\n\t\t<div className={className} ref={rootRef} style={rootStyle}>\n\t\t\t{panels.map((panel, index) => {\n\t\t\t\tconst isHidden = sizes[index] <= 1;\n\t\t\t\tconst isLeftOrTopCollapsed = (sizes[index] ?? 0) <= 1;\n\t\t\t\tconst isRightOrBottomCollapsed = (sizes[index + 1] ?? 0) <= 1;\n\t\t\t\tconst isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;\n\t\t\t\tconst panelDestroyOnHidden = panel.props.destroyOnHidden ?? destroyOnHidden;\n\t\t\t\tconst shouldRenderContent = !isHidden || !panelDestroyOnHidden;\n\n\t\t\t\treturn (\n\t\t\t\t\t<React.Fragment key={index}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackground: index % 2 ? '#fff' : '#fafafa',\n\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\tflex: `0 0 ${sizes[index] ?? 0}px`,\n\t\t\t\t\t\t\t\tminHeight: 0,\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\tboxShadow:\n\t\t\t\t\t\t\t\t\thoveredCollapsePanelIndex === index ? 'inset 0 0 0 2px #1677ff' : undefined,\n\t\t\t\t\t\t\t\ttransition:\n\t\t\t\t\t\t\t\t\tdraggingIndex === null ? 'box-shadow 0.2s ease, flex-basis 0.2s ease' : undefined,\n\t\t\t\t\t\t\t\t...semanticStyles.panel,\n\t\t\t\t\t\t\t\t...panel.props.style,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{shouldRenderContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\t\tdisplay: isHidden ? 'none' : 'block',\n\t\t\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t\t\t\t\t\tpadding: (sizes[index] ?? 0) < 32 ? 0 : 16,\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{panel.props.children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{index < panels.length - 1 && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\taria-orientation={resolvedOrientation}\n\t\t\t\t\t\t\t\tonDoubleClick={() => {\n\t\t\t\t\t\t\t\t\tonDraggerDoubleClick?.(index);\n\t\t\t\t\t\t\t\t\tresetSizes();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\t\tconst step = event.shiftKey ? 40 : 10;\n\t\t\t\t\t\t\t\t\tconst directionMap =\n\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? { ArrowLeft: -step, ArrowRight: step }\n\t\t\t\t\t\t\t\t\t\t\t: { ArrowUp: -step, ArrowDown: step };\n\t\t\t\t\t\t\t\t\tconst delta = directionMap[event.key as keyof typeof directionMap];\n\t\t\t\t\t\t\t\t\tif (delta !== undefined) {\n\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\tresizePair(index, delta);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonPointerDown={(event) => startResize(index, event)}\n\t\t\t\t\t\t\t\tonPointerEnter={() => setHoveredIndex(index)}\n\t\t\t\t\t\t\t\tonPointerLeave={() => setHoveredIndex(null)}\n\t\t\t\t\t\t\t\trole=\"separator\"\n\t\t\t\t\t\t\t\ttitle=\"拖动调整大小,双击重置\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#e6f4ff' : '#f5f5f5',\n\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\tcursor: resolvedOrientation === 'horizontal' ? 'col-resize' : 'row-resize',\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\tflex: `0 0 ${draggerSize}px`,\n\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\toutline: 'none',\n\t\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\tzIndex: isAnyCollapsed ? 2 : 1,\n\t\t\t\t\t\t\t\t\t...semanticStyles.dragger,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* 呈现拖拽指示线/图标 */}\n\t\t\t\t\t\t\t\t{(hoveredIndex === index || draggingIndex === index || !isAnyCollapsed) &&\n\t\t\t\t\t\t\t\t\t(draggerIcon ? (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#8c8c8c',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'color 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{draggerIcon}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#d9d9d9',\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\t\t\t\t\theight: resolvedOrientation === 'horizontal' ? 40 : 2,\n\t\t\t\t\t\t\t\t\t\t\t\twidth: resolvedOrientation === 'horizontal' ? 2 : 40,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t\t\t{/* 未折叠状态下呈现折叠按钮 */}\n\t\t\t\t\t\t\t\t{!isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop: '50%',\n\t\t\t\t\t\t\t\t\t\t\tleft: '50%',\n\t\t\t\t\t\t\t\t\t\t\ttransform: 'translate(-50%, -50%)',\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index, 'start')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-start',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index + 1, 'end')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* 折叠状态下呈现展开按钮(常态保持显示,精准垂直居中) */}\n\t\t\t\t\t\t\t\t{isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? '50%'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tbottom:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tleft:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: '50%',\n\t\t\t\t\t\t\t\t\t\t\tright:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'auto',\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `translate(${isLeftOrTopCollapsed ? '4px' : '-4px'}, -50%)`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `translate(-50%, ${isLeftOrTopCollapsed ? '4px' : '-4px'})`,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\t\t\tconst targetIndex = isLeftOrTopCollapsed ? index : index + 1;\n\t\t\t\t\t\t\t\t\t\t\tconst targetPanel = panels[targetIndex];\n\t\t\t\t\t\t\t\t\t\t\tconst config = getCollapsibleConfig(targetPanel?.props.collapsible);\n\t\t\t\t\t\t\t\t\t\t\tif (config.showCollapsibleIcon === false) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tconst ExpandIcon =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? RightOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: LeftOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? DownOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: UpOutlined;\n\n\t\t\t\t\t\t\t\t\t\t\tconst neighborIndex = isLeftOrTopCollapsed ? index + 1 : index;\n\t\t\t\t\t\t\t\t\t\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\n\t\t\t\t\t\t\t\t\t\t\tconst expandTitle =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开左侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开右侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开上方面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开下方面板';\n\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleCollapse(targetIndex, neighborIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: '#f3f4f6',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: '1px solid #e5e7eb',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 1px 3px rgba(0, 0, 0, 0.08)',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(targetIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#f3f4f6';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ExpandIcon />\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})()}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nCustomSplitter.Panel = SplitterPanel;\n\nexport default CustomSplitter;\n"],"mappings":"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","names":["jsx","useState","jsx","jsxs","jsx","useState","jsxs"]}
|
|
1
|
+
{"version":3,"sources":["../CollapseBox/index.tsx","../src/icons.tsx","../Splitter/index.tsx"],"sourcesContent":["import { useState, type CSSProperties, type ReactNode } from 'react';\nimport { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport './index.less';\n\nexport type CollapseBoxDirection = 'horizontal' | 'vertical';\nexport type CollapseBoxButtonPosition = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface CollapseBoxProps {\n\tchildren?: ReactNode;\n\ttitle?: string;\n\tdirection?: CollapseBoxDirection;\n\tbuttonPosition?: CollapseBoxButtonPosition;\n\tdefaultWidth?: number | string;\n\tdefaultHeight?: number | string;\n\tcontentPadding?: string;\n\theaderHeight?: number;\n\tclassName?: string;\n}\n\nconst formatDimension = (value?: number | string): string | undefined => {\n\tif (value === undefined || value === null) return undefined;\n\treturn typeof value === 'number' ? `${value}px` : value;\n};\n\nconst ChevronLeft = () => <LeftOutlined />;\n\nconst ChevronRight = () => <RightOutlined />;\n\nconst ChevronUp = () => <UpOutlined />;\n\nconst ChevronDown = () => <DownOutlined />;\n\nconst CollapsibleBox = ({\n\tchildren,\n\ttitle = '内容区域',\n\tdirection = 'horizontal',\n\tbuttonPosition = 'right',\n\tdefaultWidth = 600,\n\tdefaultHeight = 300,\n\tcontentPadding = '16px',\n\theaderHeight = 16,\n\tclassName,\n}: CollapseBoxProps) => {\n\tconst [isExpanded, setIsExpanded] = useState(true);\n\n\tconst getContentMaxHeight = () => {\n\t\tif (typeof defaultHeight === 'number') {\n\t\t\treturn `${defaultHeight - headerHeight}px`;\n\t\t}\n\t\tif (typeof defaultHeight === 'string') {\n\t\t\treturn headerHeight ? `calc(${defaultHeight} - ${headerHeight}px)` : defaultHeight;\n\t\t}\n\t\treturn '100%';\n\t};\n\n\tconst getIcon = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\tif (buttonPosition === 'right') {\n\t\t\t\treturn isExpanded ? <ChevronRight /> : <ChevronLeft />;\n\t\t\t} else {\n\t\t\t\treturn isExpanded ? <ChevronLeft /> : <ChevronRight />;\n\t\t\t}\n\t\t} else {\n\t\t\tif (buttonPosition === 'bottom') {\n\t\t\t\treturn isExpanded ? <ChevronUp /> : <ChevronDown />;\n\t\t\t} else {\n\t\t\t\treturn isExpanded ? <ChevronDown /> : <ChevronUp />;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst getButtonClass = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\treturn buttonPosition === 'right' ? 'button-right' : 'button-left';\n\t\t} else {\n\t\t\treturn buttonPosition === 'bottom' ? 'button-bottom' : 'button-top';\n\t\t}\n\t};\n\n\tconst getContainerStyle = (): CSSProperties => {\n\t\tconst resolvedHeight = formatDimension(defaultHeight);\n\t\tconst resolvedWidth = formatDimension(defaultWidth);\n\t\tif (direction === 'horizontal') {\n\t\t\treturn {\n\t\t\t\twidth: isExpanded ? resolvedWidth : '0px',\n\t\t\t\theight: resolvedHeight,\n\t\t\t\tminWidth: 0,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\theight: isExpanded ? resolvedHeight : '0px',\n\t\t\t\twidth: resolvedWidth,\n\t\t\t\tminHeight: 0,\n\t\t\t};\n\t\t}\n\t};\n\n\tconst baseWrapperClass =\n\t\tdirection === 'horizontal' ? 'collapsible-wrapper horizontal' : 'collapsible-wrapper vertical';\n\tconst wrapperClass = className ? `${baseWrapperClass} ${className}` : baseWrapperClass;\n\n\tconst containerClass =\n\t\tdirection === 'horizontal' && buttonPosition === 'right'\n\t\t\t? 'collapsible-container align-right'\n\t\t\t: 'collapsible-container';\n\tconst height = getContentMaxHeight();\n\tconst contentStyle: CSSProperties = {\n\t\tmaxHeight: direction === 'vertical' ? (isExpanded ? height : '0px') : height,\n\t\toverflowY: 'auto',\n\t\tpadding: direction === 'vertical' && !isExpanded ? '0px' : contentPadding,\n\t\tboxSizing: 'border-box',\n\t};\n\n\t// 折叠时(纵向 + 底部按钮):按钮需切换为 top:0 定位,使其显示在折叠线下方\n\tconst buttonStyle: CSSProperties =\n\t\tdirection === 'vertical' && buttonPosition === 'bottom' && !isExpanded\n\t\t\t? { top: '0px', bottom: 'auto' }\n\t\t\t: {};\n\n\t// 让 wrapper 高度跟随容器,确保 bottom:0 的按钮贴住容器底部\n\t// 折叠时 wrapper 高度为 0,配合按钮的 translateY(-100%) 让按钮显示在折叠线上方\n\tconst formattedWidth = formatDimension(defaultWidth);\n\tconst formattedHeight = formatDimension(defaultHeight);\n\tconst wrapperStyle: CSSProperties | undefined =\n\t\tdirection === 'vertical'\n\t\t\t? isExpanded\n\t\t\t\t? {\n\t\t\t\t\t\theight: formattedHeight,\n\t\t\t\t\t\twidth: formattedWidth,\n\t\t\t\t\t}\n\t\t\t\t: { height: 0, width: formattedWidth }\n\t\t\t: undefined;\n\n\treturn (\n\t\t<div className={wrapperClass} style={wrapperStyle}>\n\t\t\t<div style={getContainerStyle()} className={containerClass}>\n\t\t\t\t{title && (\n\t\t\t\t\t<div className=\"collapsible-header\" style={{ display: 'none' }}>\n\t\t\t\t\t\t<h3>{title}</h3>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"collapsible-content\" style={contentStyle}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tonClick={() => setIsExpanded(!isExpanded)}\n\t\t\t\tclassName={`toggle-button ${getButtonClass()}`}\n\t\t\t\tstyle={buttonStyle}\n\t\t\t\ttitle={isExpanded ? '隐藏' : '展开'}\n\t\t\t>\n\t\t\t\t{getIcon()}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default CollapsibleBox;\n","import type { CSSProperties } from 'react';\n\ninterface IconProps {\n\tstyle?: CSSProperties;\n\tclassName?: string;\n}\n\nconst baseStyle: CSSProperties = {\n\tdisplay: 'inline-block',\n\twidth: '1em',\n\theight: '1em',\n\tverticalAlign: '-0.125em',\n};\n\nexport const LeftOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"left\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z\" />\n\t</svg>\n);\n\nexport const RightOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"right\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z\" />\n\t</svg>\n);\n\nexport const UpOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"up\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M890.5 755.3L537.4 268a31.96 31.96 0 00-50.8 0L133.5 755.3a7.95 7.95 0 006.3 12.7h75.5c4.9 0 9.6-2.3 12.6-6.1l281-360 281 360c3 3.8 7.7 6.1 12.6 6.1h75.5c6.7 0 10.4-7.6 6.1-12.7z\" />\n\t</svg>\n);\n\nexport const DownOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"down\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 37 17.6 49.8 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\" />\n\t</svg>\n);\n","import { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport type {\n\tCSSProperties,\n\tReactElement,\n\tReactNode,\n\tPointerEvent as ReactPointerEvent,\n} from 'react';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nexport type SplitterSize = number | `${number}%`;\nexport type SplitterOrientation = 'horizontal' | 'vertical';\n\nexport type SplitterCollapsible =\n\t| boolean\n\t| {\n\t\t\tstart?: boolean;\n\t\t\tend?: boolean;\n\t\t\tshowCollapsibleIcon?: boolean | 'auto';\n\t };\n\n/**\n * Splitter.Panel 子面板组件属性\n */\nexport type SplitterPanelProps = {\n\t/** 面板内容节点 */\n\tchildren?: ReactNode;\n\t/** 面板自定义类名 */\n\tclassName?: string;\n\t/**\n\t * 折叠配置:\n\t * - `boolean`: 是否允许两端折叠\n\t * - `Object`: `{ start?: boolean; end?: boolean; showCollapsibleIcon?: boolean | 'auto' }`\n\t */\n\tcollapsible?: SplitterCollapsible;\n\t/** 面板初始默认尺寸(支持数字 px 或百分比字符串如 '40%') */\n\tdefaultSize?: SplitterSize;\n\t/** 折叠/隐藏时是否销毁面板内容节点(可覆盖 Splitter 根容器上的 destroyOnHidden 属性) */\n\tdestroyOnHidden?: boolean;\n\t/** 面板最大允许尺寸限制 */\n\tmax?: SplitterSize;\n\t/** 面板最小允许尺寸限制 */\n\tmin?: SplitterSize;\n\t/** 是否允许通过分隔条拖拽调整大小(默认 true) */\n\tresizable?: boolean;\n\t/** 面板受控尺寸 */\n\tsize?: SplitterSize;\n\t/** 面板自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n};\n\nexport type SplitterSemanticDOM = 'root' | 'panel' | 'dragger';\n/** 语义化 DOM 结构标识 */\nexport type SemanticDOM = SplitterSemanticDOM;\n\nexport type SplitterStyles =\n\t| Partial<Record<SplitterSemanticDOM, CSSProperties>>\n\t| ((info: { props: SplitterProps }) => Partial<Record<SplitterSemanticDOM, CSSProperties>>);\n\nexport type SplitterClassNames =\n\t| Partial<Record<SplitterSemanticDOM, string>>\n\t| ((info: { props: SplitterProps }) => Partial<Record<SplitterSemanticDOM, string>>);\n\n/**\n * Splitter 根容器组件属性\n */\nexport type SplitterProps = {\n\t/** 面板集合(建议传入 Splitter.Panel) */\n\tchildren?: ReactNode;\n\t/** 容器根节点自定义类名 */\n\tclassName?: string;\n\t/** 用于自定义组件内部各语义化结构(root、panel、dragger)的 class,支持对象或函数 */\n\tclassNames?: SplitterClassNames;\n\t/** 折叠/隐藏时是否销毁面板内容节点(默认 false,保留组件状态) */\n\tdestroyOnHidden?: boolean;\n\t/** 拖拽分隔条的宽度/高度(单位 px,默认 4) */\n\tdraggerSize?: number;\n\t/** 是否在拖拽结束时才更新视图(默认 false) */\n\tlazy?: boolean;\n\t/** 面板展开或折叠状态改变时的回调 */\n\tonCollapse?: (collapsed: boolean[], sizes: number[]) => void;\n\t/** 拖拽过程中的实时尺寸变化回调 */\n\tonResize?: (sizes: number[]) => void;\n\t/** 拖拽结束、重置尺寸或折叠完成时的回调 */\n\tonResizeEnd?: (sizes: number[]) => void;\n\t/** 开始拖拽分隔条时的回调 */\n\tonResizeStart?: (sizes: number[]) => void;\n\t/** 双击拖拽条回调 */\n\tonDraggerDoubleClick?: (index: number) => void;\n\t/** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */\n\torientation?: SplitterOrientation;\n\t/** 容器根节点自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n\t/** 容器根节点及各语义化结构(root、panel、dragger)自定义 CSS 样式,支持对象或函数 */\n\tstyles?: SplitterStyles;\n\t/** 是否垂直分屏(orientation=\"vertical\" 的简写形式) 排列方向,与 orientation 同时存在,以 orientation 优先 */\n\tvertical?: boolean;\n\t/** 自定义拖拽手柄图标/节点 */\n\tdraggerIcon?: ReactNode;\n};\n\nexport interface ResolvedCollapsible {\n\tstart: boolean;\n\tend: boolean;\n\tshowCollapsibleIcon: boolean | 'auto';\n}\n\nconst getCollapsibleConfig = (collapsible?: SplitterCollapsible): ResolvedCollapsible => {\n\tif (!collapsible) {\n\t\treturn { start: false, end: false, showCollapsibleIcon: 'auto' };\n\t}\n\tif (typeof collapsible === 'boolean') {\n\t\treturn {\n\t\t\tstart: collapsible,\n\t\t\tend: collapsible,\n\t\t\tshowCollapsibleIcon: collapsible ? true : 'auto',\n\t\t};\n\t}\n\treturn {\n\t\tstart: collapsible.start ?? false,\n\t\tend: collapsible.end ?? false,\n\t\tshowCollapsibleIcon: collapsible.showCollapsibleIcon ?? true,\n\t};\n};\n\ntype SplitterComponent = React.FC<SplitterProps> & {\n\tPanel: React.FC<SplitterPanelProps>;\n};\n\nconst DEFAULT_DRAGGER_SIZE = 4;\nconst MIN_DRAG_SIZE = 40; // 手动拖拽调整大小时的默认最小限制 (px)\n\nconst SplitterPanel: React.FC<SplitterPanelProps> = ({ children }) => <>{children}</>;\n\nconst isPercentSize = (value: SplitterSize): value is `${number}%` =>\n\ttypeof value === 'string' && value.endsWith('%');\n\nconst parseSize = (value: SplitterSize | undefined, total: number, fallback: number) => {\n\tif (value === undefined) {\n\t\treturn fallback;\n\t}\n\n\tif (isPercentSize(value)) {\n\t\treturn (Number.parseFloat(value) / 100) * total;\n\t}\n\n\treturn Number(value);\n};\n\nconst roundSizes = (sizes: number[]) => sizes.map((size) => Math.round(size));\n\nconst getPointerPosition = (\n\tevent: PointerEvent | ReactPointerEvent,\n\torientation: SplitterOrientation,\n) => (orientation === 'horizontal' ? event.clientX : event.clientY);\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveSemanticStyles = (\n\tstyles: SplitterStyles | undefined,\n\tinfoProps: SplitterProps,\n): Partial<Record<SplitterSemanticDOM, CSSProperties>> => {\n\tif (!styles) {\n\t\treturn {};\n\t}\n\n\tconst resolved = typeof styles === 'function' ? styles({ props: infoProps }) : styles;\n\treturn resolved || {};\n};\n\nconst resolveSemanticClassNames = (\n\tclassNames: SplitterClassNames | undefined,\n\tinfoProps: SplitterProps,\n): Partial<Record<SplitterSemanticDOM, string>> => {\n\tif (!classNames) {\n\t\treturn {};\n\t}\n\n\tconst resolved = typeof classNames === 'function' ? classNames({ props: infoProps }) : classNames;\n\treturn resolved || {};\n};\n\nconst CustomSplitter: SplitterComponent = (props) => {\n\tconst {\n\t\tchildren,\n\t\tclassName,\n\t\tclassNames,\n\t\tdestroyOnHidden = false,\n\t\tdraggerIcon,\n\t\tdraggerSize = DEFAULT_DRAGGER_SIZE,\n\t\tlazy = false,\n\t\tonResize,\n\t\tonResizeEnd,\n\t\tonResizeStart,\n\t\tonCollapse,\n\t\tonDraggerDoubleClick,\n\t\torientation,\n\t\tstyle,\n\t\tstyles,\n\t\tvertical = false,\n\t} = props;\n\tconst resolvedOrientation = orientation ?? (vertical ? 'vertical' : 'horizontal');\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\tconst sizesRef = useRef<number[]>([]);\n\tconst [containerSize, setContainerSize] = useState(0);\n\tconst [draggingIndex, setDraggingIndex] = useState<number | null>(null);\n\tconst [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n\tconst [hoveredCollapsePanelIndex, setHoveredCollapsePanelIndex] = useState<number | null>(null);\n\tconst [sizes, setSizes] = useState<number[]>([]);\n\n\tconst semanticStyles = useMemo(() => resolveSemanticStyles(styles, props), [styles, props]);\n\tconst semanticClassNames = useMemo(\n\t\t() => resolveSemanticClassNames(classNames, props),\n\t\t[classNames, props],\n\t);\n\n\tconst panels = useMemo(\n\t\t() =>\n\t\t\tReact.Children.toArray(children).filter(\n\t\t\t\tReact.isValidElement,\n\t\t\t) as ReactElement<SplitterPanelProps>[],\n\t\t[children],\n\t);\n\n\tconst trackSize = Math.max(0, containerSize - Math.max(0, panels.length - 1) * draggerSize);\n\n\tconst getPanelMin = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.min, trackSize, 0),\n\t\t[panels, trackSize],\n\t);\n\n\tconst getPanelMax = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.max, trackSize, trackSize),\n\t\t[panels, trackSize],\n\t);\n\n\tconst normalizeToTrack = useCallback(\n\t\t(nextSizes: number[]) => {\n\t\t\tif (!trackSize || !nextSizes.length) {\n\t\t\t\treturn nextSizes;\n\t\t\t}\n\n\t\t\tconst normalized = [...nextSizes];\n\t\t\tconst diff = trackSize - normalized.reduce((sum, size) => sum + size, 0);\n\t\t\tconst flexibleIndex = normalized.findIndex((size) => size > 0);\n\t\t\tif (flexibleIndex !== -1) {\n\t\t\t\tnormalized[flexibleIndex] += diff;\n\t\t\t}\n\n\t\t\treturn normalized.map((size, index) => {\n\t\t\t\t// 折叠状态(size <= 1)保持为 0,不受 min 限制干扰\n\t\t\t\tif (size <= 1) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\t// 拖拽过程从 0 拖出时,允许在 0 到 min 之间平滑过渡,不被强行跳变到 min\n\t\t\t\tif (size < getPanelMin(index)) {\n\t\t\t\t\treturn size;\n\t\t\t\t}\n\t\t\t\treturn clamp(size, getPanelMin(index), getPanelMax(index));\n\t\t\t});\n\t\t},\n\t\t[getPanelMax, getPanelMin, trackSize],\n\t);\n\n\tconst buildInitialSizes = useCallback(\n\t\t(previous?: number[]) => {\n\t\t\tif (!trackSize || !panels.length) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tif (previous?.length === panels.length) {\n\t\t\t\tconst previousTotal = previous.reduce((sum, size) => sum + size, 0);\n\t\t\t\tif (previousTotal > 0) {\n\t\t\t\t\treturn normalizeToTrack(previous.map((size) => (size / previousTotal) * trackSize));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst explicitSizes = panels.map((panel) =>\n\t\t\t\tparseSize(panel.props.size ?? panel.props.defaultSize, trackSize, -1),\n\t\t\t);\n\t\t\tconst usedSize = explicitSizes\n\t\t\t\t.filter((size) => size >= 0)\n\t\t\t\t.reduce((sum, size) => sum + size, 0);\n\t\t\tconst unsetCount = explicitSizes.filter((size) => size < 0).length;\n\t\t\tconst fallbackSize = unsetCount ? Math.max(0, (trackSize - usedSize) / unsetCount) : 0;\n\n\t\t\treturn normalizeToTrack(\n\t\t\t\texplicitSizes.map((size, index) =>\n\t\t\t\t\tclamp(size >= 0 ? size : fallbackSize, getPanelMin(index), getPanelMax(index)),\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack, panels, trackSize],\n\t);\n\n\tconst updateSizes = useCallback(\n\t\t(nextSizes: number[], notify = true) => {\n\t\t\tconst normalized = normalizeToTrack(nextSizes);\n\t\t\tsetSizes(normalized);\n\t\t\tsizesRef.current = normalized;\n\t\t\tif (notify) {\n\t\t\t\tonResize?.(roundSizes(normalized));\n\t\t\t}\n\t\t},\n\t\t[normalizeToTrack, onResize],\n\t);\n\n\tuseEffect(() => {\n\t\tconst node = rootRef.current;\n\t\tif (!node) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst syncSize = () => {\n\t\t\tsetContainerSize(resolvedOrientation === 'horizontal' ? node.clientWidth : node.clientHeight);\n\t\t};\n\t\tsyncSize();\n\n\t\tconst observer = new ResizeObserver(syncSize);\n\t\tobserver.observe(node);\n\t\treturn () => observer.disconnect();\n\t}, [resolvedOrientation]);\n\n\tuseEffect(() => {\n\t\tsetSizes((previous) => {\n\t\t\tconst nextSizes = buildInitialSizes(previous);\n\t\t\tsizesRef.current = nextSizes;\n\t\t\treturn nextSizes;\n\t\t});\n\t}, [buildInitialSizes]);\n\n\tconst getResizedPair = useCallback(\n\t\t(sourceSizes: number[], index: number, delta: number) => {\n\t\t\tconst nextSizes = [...sourceSizes];\n\t\t\tconst isLeftCollapsed = sourceSizes[index] <= 1;\n\t\t\tconst isRightCollapsed = sourceSizes[index + 1] <= 1;\n\n\t\t\tconst leftMin = isLeftCollapsed ? 0 : getPanelMin(index);\n\t\t\tconst rightMin = isRightCollapsed ? 0 : getPanelMin(index + 1);\n\t\t\tconst leftMax = getPanelMax(index);\n\t\t\tconst rightMax = getPanelMax(index + 1);\n\n\t\t\tconst minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);\n\t\t\tconst maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);\n\t\t\tconst safeDelta = clamp(delta, minDelta, maxDelta);\n\n\t\t\tnextSizes[index] = sourceSizes[index] + safeDelta;\n\t\t\tnextSizes[index + 1] = sourceSizes[index + 1] - safeDelta;\n\t\t\treturn normalizeToTrack(nextSizes);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack],\n\t);\n\n\tconst resizePair = useCallback(\n\t\t(index: number, delta: number, notify = true) => {\n\t\t\tupdateSizes(getResizedPair(sizesRef.current, index, delta), notify);\n\t\t},\n\t\t[getResizedPair, updateSizes],\n\t);\n\n\tconst startResize = (index: number, event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (panels[index].props.resizable === false || panels[index + 1].props.resizable === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tconst startPosition = getPointerPosition(event, resolvedOrientation);\n\t\tconst startSizes = [...sizesRef.current];\n\t\tlet latestSizes = startSizes;\n\n\t\tsetDraggingIndex(index);\n\t\tonResizeStart?.(roundSizes(startSizes));\n\n\t\tconst handlePointerMove = (moveEvent: PointerEvent) => {\n\t\t\tconst delta = getPointerPosition(moveEvent, resolvedOrientation) - startPosition;\n\t\t\tlatestSizes = getResizedPair(startSizes, index, delta);\n\t\t\tif (!lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePointerUp = () => {\n\t\t\tdocument.removeEventListener('pointermove', handlePointerMove);\n\t\t\tdocument.removeEventListener('pointerup', handlePointerUp);\n\t\t\tsetDraggingIndex(null);\n\t\t\tif (lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\t\tconst startCollapsed = startSizes.map((size) => size <= 1);\n\t\t\tif (currentCollapsed.some((c, i) => c !== startCollapsed[i])) {\n\t\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t\t}\n\t\t\tonResizeEnd?.(currentSizes);\n\t\t};\n\n\t\tdocument.addEventListener('pointermove', handlePointerMove);\n\t\tdocument.addEventListener('pointerup', handlePointerUp);\n\t};\n\n\tconst toggleCollapse = (index: number, neighborIndex: number) => {\n\t\tconst nextSizes = [...sizesRef.current];\n\n\t\tif (nextSizes[index] > 1) {\n\t\t\tnextSizes[neighborIndex] += nextSizes[index];\n\t\t\tnextSizes[index] = 0;\n\t\t} else {\n\t\t\tconst initialSizes = buildInitialSizes();\n\t\t\tconst initialSize =\n\t\t\t\tinitialSizes[index] ??\n\t\t\t\tparseSize(panels[index].props.defaultSize, trackSize, trackSize / panels.length);\n\t\t\tconst restoredSize = clamp(initialSize, getPanelMin(index), getPanelMax(index));\n\t\t\tnextSizes[index] = restoredSize;\n\t\t\tnextSizes[neighborIndex] = Math.max(0, nextSizes[neighborIndex] - nextSizes[index]);\n\t\t}\n\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst resetSizes = () => {\n\t\tconst previousCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tconst nextSizes = buildInitialSizes();\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tif (currentCollapsed.some((c, i) => c !== previousCollapsed[i])) {\n\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t}\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst rootStyle: CSSProperties = {\n\t\tborder: '1px solid #f0f0f0',\n\t\tborderRadius: 8,\n\t\tboxSizing: 'border-box',\n\t\tdisplay: 'flex',\n\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\theight: 360,\n\t\tminHeight: 0,\n\t\toverflow: 'hidden',\n\t\tposition: 'relative',\n\t\twidth: '100%',\n\t\t...semanticStyles.root,\n\t\t...style,\n\t};\n\n\tconst renderCollapseButton = (\n\t\tdraggerIndex: number,\n\t\tpanelIndex: number,\n\t\tdirection: 'start' | 'end',\n\t) => {\n\t\tconst panel = panels[panelIndex];\n\t\tconst config = getCollapsibleConfig(panel?.props.collapsible);\n\t\tconst isAllowed = direction === 'start' ? config.start : config.end;\n\n\t\tif (!isAllowed || config.showCollapsibleIcon === false) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst neighborIndex = direction === 'start' ? panelIndex + 1 : panelIndex - 1;\n\t\tconst isCollapsed = (sizes[panelIndex] ?? 0) <= 1;\n\t\tconst isNeighborCollapsed = (sizes[neighborIndex] ?? 0) <= 1;\n\n\t\t// 自己折叠后隐藏;对侧面板折叠后也隐藏(避免与展开按钮重复/语义冲突)\n\t\tif (isCollapsed || isNeighborCollapsed) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// 展开时箭头指向面板将被折叠到的方向\n\t\tconst Icon =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? LeftOutlined\n\t\t\t\t\t: RightOutlined\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? UpOutlined\n\t\t\t\t\t: DownOutlined;\n\n\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\t\tconst isAlwaysShow = config.showCollapsibleIcon === true;\n\t\tconst isHoveredOrDragging = hoveredIndex === draggerIndex || draggingIndex === draggerIndex;\n\t\tconst opacity = isAlwaysShow || isHoveredOrDragging ? 1 : 0;\n\t\tconst pointerEvents = isAlwaysShow || isHoveredOrDragging ? 'auto' : 'none';\n\n\t\tconst buttonTitle =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? '折叠左侧面板'\n\t\t\t\t\t: '折叠右侧面板'\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? '折叠上方面板'\n\t\t\t\t\t: '折叠下方面板';\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\taria-label={buttonTitle}\n\t\t\t\ttitle={buttonTitle}\n\t\t\t\tonClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\ttoggleCollapse(panelIndex, neighborIndex);\n\t\t\t\t}}\n\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}}\n\t\t\t\tstyle={{\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\tborder: '1px solid #d9d9d9',\n\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tfontSize: 10,\n\t\t\t\t\tboxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\topacity,\n\t\t\t\t\tpointerEvents,\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(panelIndex);\n\t\t\t\t}}\n\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#fff';\n\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Icon />\n\t\t\t</button>\n\t\t);\n\t};\n\n\tconst rootClassName = [className, semanticClassNames.root].filter(Boolean).join(' ') || undefined;\n\n\treturn (\n\t\t<div className={rootClassName} ref={rootRef} style={rootStyle}>\n\t\t\t{panels.map((panel, index) => {\n\t\t\t\tconst isHidden = sizes[index] <= 1;\n\t\t\t\tconst isLeftOrTopCollapsed = (sizes[index] ?? 0) <= 1;\n\t\t\t\tconst isRightOrBottomCollapsed = (sizes[index + 1] ?? 0) <= 1;\n\t\t\t\tconst isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;\n\t\t\t\tconst panelDestroyOnHidden = panel.props.destroyOnHidden ?? destroyOnHidden;\n\t\t\t\tconst shouldRenderContent = !isHidden || !panelDestroyOnHidden;\n\n\t\t\t\treturn (\n\t\t\t\t\t<React.Fragment key={index}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t[semanticClassNames.panel, panel.props.className].filter(Boolean).join(' ') ||\n\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackground: index % 2 ? '#fff' : '#fafafa',\n\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\tflex: `0 0 ${sizes[index] ?? 0}px`,\n\t\t\t\t\t\t\t\tminHeight: 0,\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\tboxShadow:\n\t\t\t\t\t\t\t\t\thoveredCollapsePanelIndex === index ? 'inset 0 0 0 2px #1677ff' : undefined,\n\t\t\t\t\t\t\t\ttransition:\n\t\t\t\t\t\t\t\t\tdraggingIndex === null ? 'box-shadow 0.2s ease, flex-basis 0.2s ease' : undefined,\n\t\t\t\t\t\t\t\t...semanticStyles.panel,\n\t\t\t\t\t\t\t\t...panel.props.style,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{shouldRenderContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\t\tdisplay: isHidden ? 'none' : 'block',\n\t\t\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t\t\t\t\t\tpadding: (sizes[index] ?? 0) < 32 ? 0 : 16,\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{panel.props.children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{index < panels.length - 1 && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\taria-orientation={resolvedOrientation}\n\t\t\t\t\t\t\t\tclassName={semanticClassNames.dragger}\n\t\t\t\t\t\t\t\tonDoubleClick={() => {\n\t\t\t\t\t\t\t\t\tonDraggerDoubleClick?.(index);\n\t\t\t\t\t\t\t\t\tresetSizes();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\t\tconst step = event.shiftKey ? 40 : 10;\n\t\t\t\t\t\t\t\t\tconst directionMap =\n\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? { ArrowLeft: -step, ArrowRight: step }\n\t\t\t\t\t\t\t\t\t\t\t: { ArrowUp: -step, ArrowDown: step };\n\t\t\t\t\t\t\t\t\tconst delta = directionMap[event.key as keyof typeof directionMap];\n\t\t\t\t\t\t\t\t\tif (delta !== undefined) {\n\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\tresizePair(index, delta);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonPointerDown={(event) => startResize(index, event)}\n\t\t\t\t\t\t\t\tonPointerEnter={() => setHoveredIndex(index)}\n\t\t\t\t\t\t\t\tonPointerLeave={() => setHoveredIndex(null)}\n\t\t\t\t\t\t\t\trole=\"separator\"\n\t\t\t\t\t\t\t\ttitle=\"拖动调整大小,双击重置\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#e6f4ff' : '#f5f5f5',\n\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\tcursor: resolvedOrientation === 'horizontal' ? 'col-resize' : 'row-resize',\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\tflex: `0 0 ${draggerSize}px`,\n\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\toutline: 'none',\n\t\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\tzIndex: isAnyCollapsed ? 2 : 1,\n\t\t\t\t\t\t\t\t\t...semanticStyles.dragger,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* 呈现拖拽指示线/图标 */}\n\t\t\t\t\t\t\t\t{(hoveredIndex === index || draggingIndex === index || !isAnyCollapsed) &&\n\t\t\t\t\t\t\t\t\t(draggerIcon ? (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#8c8c8c',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'color 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{draggerIcon}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#d9d9d9',\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\t\t\t\t\theight: resolvedOrientation === 'horizontal' ? 40 : 2,\n\t\t\t\t\t\t\t\t\t\t\t\twidth: resolvedOrientation === 'horizontal' ? 2 : 40,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t\t\t{/* 未折叠状态下呈现折叠按钮 */}\n\t\t\t\t\t\t\t\t{!isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop: '50%',\n\t\t\t\t\t\t\t\t\t\t\tleft: '50%',\n\t\t\t\t\t\t\t\t\t\t\ttransform: 'translate(-50%, -50%)',\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index, 'start')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-start',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index + 1, 'end')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* 折叠状态下呈现展开按钮(常态保持显示,精准垂直居中) */}\n\t\t\t\t\t\t\t\t{isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? '50%'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tbottom:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tleft:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: '50%',\n\t\t\t\t\t\t\t\t\t\t\tright:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'auto',\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `translate(${isLeftOrTopCollapsed ? '4px' : '-4px'}, -50%)`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `translate(-50%, ${isLeftOrTopCollapsed ? '4px' : '-4px'})`,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\t\t\tconst targetIndex = isLeftOrTopCollapsed ? index : index + 1;\n\t\t\t\t\t\t\t\t\t\t\tconst targetPanel = panels[targetIndex];\n\t\t\t\t\t\t\t\t\t\t\tconst config = getCollapsibleConfig(targetPanel?.props.collapsible);\n\t\t\t\t\t\t\t\t\t\t\tif (config.showCollapsibleIcon === false) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tconst ExpandIcon =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? RightOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: LeftOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? DownOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: UpOutlined;\n\n\t\t\t\t\t\t\t\t\t\t\tconst neighborIndex = isLeftOrTopCollapsed ? index + 1 : index;\n\t\t\t\t\t\t\t\t\t\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\n\t\t\t\t\t\t\t\t\t\t\tconst expandTitle =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开左侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开右侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开上方面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开下方面板';\n\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleCollapse(targetIndex, neighborIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: '#f3f4f6',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: '1px solid #e5e7eb',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 1px 3px rgba(0, 0, 0, 0.08)',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(targetIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#f3f4f6';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ExpandIcon />\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})()}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nCustomSplitter.Panel = SplitterPanel;\n\nexport default CustomSplitter;\n"],"mappings":"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","names":["jsx","useState","jsx","jsxs","jsx","useState","jsxs"]}
|