react-public-components 1.1.8 → 1.1.10

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 CHANGED
@@ -80,32 +80,35 @@ import { Splitter } from 'react-public-components';
80
80
 
81
81
  ### Splitter Props
82
82
 
83
- | 属性 | 类型 | 默认值 | 说明 |
84
- | --------------- | ------------------------------------------------- | -------------- | -------------------------------------- |
85
- | `children` | `ReactNode`(必须为 `Splitter.Panel`) | - | 面板集合,建议 2 个及以上 |
86
- | `className` | `string` | - | 根节点自定义类名 |
87
- | `style` | `CSSProperties` | - | 根节点自定义样式 |
88
- | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | 分屏方向(优先级高于 `vertical`) |
89
- | `vertical` | `boolean` | `false` | 是否垂直分屏(兼容写法) |
90
- | `lazy` | `boolean` | `false` | 是否在拖拽结束时才更新视图(提升性能) |
91
- | `onResizeStart` | `(sizes: number[]) => void` | - | 拖拽开始回调 |
92
- | `onResize` | `(sizes: number[]) => void` | - | 拖拽过程中尺寸变化回调 |
93
- | `onResizeEnd` | `(sizes: number[]) => void` | - | 拖拽/折叠/重置结束回调 |
94
- | `onCollapse` | `(collapsed: boolean[], sizes: number[]) => void` | - | 面板展开或折叠状态发生变化时的回调 |
95
- | `draggerIcon` | `ReactNode` | - | 自定义拖拽手柄指示图标节点 |
83
+ | 属性 | 类型 | 默认值 | 说明 |
84
+ | ---------------------- | ------------------------------------------------------------------------------------------------------------------ | -------------- | -------------------------------------------------------------------------------------- |
85
+ | `children` | `ReactNode`(必须为 `Splitter.Panel`) | - | 面板集合,建议 2 个及以上 |
86
+ | `className` | `string` | - | 根节点自定义类名 |
87
+ | `style` | `CSSProperties \| Record<SemanticDOM, CSSProperties> \| ((info: { props }) => Record<SemanticDOM, CSSProperties>)` | - | 自定义组件内部各语义化结构(`root` / `panel` / `dragger`)的行内 style,支持对象或函数 |
88
+ | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | 分屏方向(优先级高于 `vertical`) |
89
+ | `vertical` | `boolean` | `false` | 是否垂直分屏(兼容写法) |
90
+ | `lazy` | `boolean` | `false` | 是否在拖拽结束时才更新视图(提升性能) |
91
+ | `onResizeStart` | `(sizes: number[]) => void` | - | 拖拽开始回调 |
92
+ | `onResize` | `(sizes: number[]) => void` | - | 拖拽过程中尺寸变化回调 |
93
+ | `onResizeEnd` | `(sizes: number[]) => void` | - | 拖拽/折叠/重置结束回调 |
94
+ | `onCollapse` | `(collapsed: boolean[], sizes: number[]) => void` | - | 面板展开或折叠状态发生变化时的回调 |
95
+ | `onDraggerDoubleClick` | `(index: number) => void` | - | 双击拖拽条回调 |
96
+ | `draggerIcon` | `ReactNode` | - | 自定义拖拽手柄指示图标节点 |
97
+ | `destroyOnHidden` | `boolean` | `false` | 折叠/隐藏时是否销毁所有面板内容节点 |
96
98
 
97
99
  ### Splitter.Panel Props
98
100
 
99
- | 属性 | 类型 | 默认值 | 说明 |
100
- | ------------- | ---------------------------------------------------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------- |
101
- | `children` | `ReactNode` | - | 面板内容 |
102
- | `size` | `number \| '${number}%'` | - | 受控尺寸 |
103
- | `defaultSize` | `number \| '${number}%'` | - | 初始尺寸(未设置时按剩余空间平均分配) |
104
- | `min` | `number \| '${number}%'` | `0` | 最小尺寸 |
105
- | `max` | `number \| '${number}%'` | - | 最大尺寸 |
106
- | `collapsible` | `boolean \| { start?: boolean; end?: boolean; showCollapsibleIcon?: boolean \| 'auto' }` | `false` | 是否允许折叠面板。支持配置指定折叠方向(`start`/`end`)及图标显示策略(`showCollapsibleIcon`) |
107
- | `resizable` | `boolean` | `true` | 是否允许拖拽调整(两侧任一为 `false` 都会禁用对应分隔条) |
108
- | `style` | `CSSProperties` | - | 面板自定义样式 |
101
+ | 属性 | 类型 | 默认值 | 说明 |
102
+ | ----------------- | ---------------------------------------------------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------- |
103
+ | `children` | `ReactNode` | - | 面板内容 |
104
+ | `size` | `number \| '${number}%'` | - | 受控尺寸 |
105
+ | `defaultSize` | `number \| '${number}%'` | - | 初始尺寸(未设置时按剩余空间平均分配) |
106
+ | `min` | `number \| '${number}%'` | `0` | 最小尺寸 |
107
+ | `max` | `number \| '${number}%'` | - | 最大尺寸 |
108
+ | `collapsible` | `boolean \| { start?: boolean; end?: boolean; showCollapsibleIcon?: boolean \| 'auto' }` | `false` | 是否允许折叠面板。支持配置指定折叠方向(`start`/`end`)及图标显示策略(`showCollapsibleIcon`) |
109
+ | `destroyOnHidden` | `boolean` | - | 折叠/隐藏时是否销毁当前面板内容节点(可覆盖 Splitter 根属性) |
110
+ | `resizable` | `boolean` | `true` | 是否允许拖拽调整(两侧任一为 `false` 都会禁用对应分隔条) |
111
+ | `style` | `CSSProperties` | - | 面板自定义样式 |
109
112
 
110
113
  ### 基础用法
111
114
 
package/dist/index.cjs CHANGED
@@ -249,20 +249,37 @@ 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 CustomSplitter = ({
253
- children,
254
- className,
255
- draggerIcon,
256
- draggerSize = DEFAULT_DRAGGER_SIZE,
257
- lazy = false,
258
- onResize,
259
- onResizeEnd,
260
- onResizeStart,
261
- onCollapse,
262
- orientation,
263
- style,
264
- vertical = false
265
- }) => {
252
+ var resolveSemanticStyles = (style, infoProps) => {
253
+ if (!style) {
254
+ return {};
255
+ }
256
+ const resolved = typeof style === "function" ? style({ props: infoProps }) : style;
257
+ if (!resolved) {
258
+ return {};
259
+ }
260
+ const hasSemanticKey = "root" in resolved || "panel" in resolved || "dragger" in resolved;
261
+ if (hasSemanticKey) {
262
+ return resolved;
263
+ }
264
+ return { root: resolved };
265
+ };
266
+ var CustomSplitter = (props) => {
267
+ const {
268
+ children,
269
+ className,
270
+ destroyOnHidden = false,
271
+ draggerIcon,
272
+ draggerSize = DEFAULT_DRAGGER_SIZE,
273
+ lazy = false,
274
+ onResize,
275
+ onResizeEnd,
276
+ onResizeStart,
277
+ onCollapse,
278
+ onDraggerDoubleClick,
279
+ orientation,
280
+ style,
281
+ vertical = false
282
+ } = props;
266
283
  const resolvedOrientation = orientation != null ? orientation : vertical ? "vertical" : "horizontal";
267
284
  const rootRef = (0, import_react2.useRef)(null);
268
285
  const sizesRef = (0, import_react2.useRef)([]);
@@ -271,6 +288,7 @@ var CustomSplitter = ({
271
288
  const [hoveredIndex, setHoveredIndex] = (0, import_react2.useState)(null);
272
289
  const [hoveredCollapsePanelIndex, setHoveredCollapsePanelIndex] = (0, import_react2.useState)(null);
273
290
  const [sizes, setSizes] = (0, import_react2.useState)([]);
291
+ const semanticStyles = (0, import_react2.useMemo)(() => resolveSemanticStyles(style, props), [style, props]);
274
292
  const panels = (0, import_react2.useMemo)(
275
293
  () => import_react2.default.Children.toArray(children).filter(
276
294
  import_react2.default.isValidElement
@@ -474,7 +492,7 @@ var CustomSplitter = ({
474
492
  overflow: "hidden",
475
493
  position: "relative",
476
494
  width: "100%",
477
- ...style
495
+ ...semanticStyles.root
478
496
  };
479
497
  const renderCollapseButton = (draggerIndex, panelIndex, direction) => {
480
498
  var _a, _b;
@@ -506,6 +524,9 @@ var CustomSplitter = ({
506
524
  event.stopPropagation();
507
525
  toggleCollapse(panelIndex, neighborIndex);
508
526
  },
527
+ onDoubleClick: (event) => {
528
+ event.stopPropagation();
529
+ },
509
530
  style: {
510
531
  alignItems: "center",
511
532
  background: "#fff",
@@ -540,11 +561,13 @@ var CustomSplitter = ({
540
561
  );
541
562
  };
542
563
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className, ref: rootRef, style: rootStyle, children: panels.map((panel, index) => {
543
- var _a, _b, _c, _d;
564
+ var _a, _b, _c, _d, _e;
544
565
  const isHidden = sizes[index] <= 1;
545
566
  const isLeftOrTopCollapsed = ((_a = sizes[index]) != null ? _a : 0) <= 1;
546
567
  const isRightOrBottomCollapsed = ((_b = sizes[index + 1]) != null ? _b : 0) <= 1;
547
568
  const isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;
569
+ const panelDestroyOnHidden = (_c = panel.props.destroyOnHidden) != null ? _c : destroyOnHidden;
570
+ const shouldRenderContent = !isHidden || !panelDestroyOnHidden;
548
571
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react2.default.Fragment, { children: [
549
572
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
550
573
  "div",
@@ -552,23 +575,25 @@ var CustomSplitter = ({
552
575
  style: {
553
576
  background: index % 2 ? "#fff" : "#fafafa",
554
577
  boxSizing: "border-box",
555
- flex: `0 0 ${(_c = sizes[index]) != null ? _c : 0}px`,
578
+ flex: `0 0 ${(_d = sizes[index]) != null ? _d : 0}px`,
556
579
  minHeight: 0,
557
580
  minWidth: 0,
558
581
  overflow: "hidden",
559
582
  position: "relative",
560
583
  boxShadow: hoveredCollapsePanelIndex === index ? "inset 0 0 0 2px #1677ff" : void 0,
561
584
  transition: draggingIndex === null ? "box-shadow 0.2s ease, flex-basis 0.2s ease" : void 0,
585
+ ...semanticStyles.panel,
562
586
  ...panel.props.style
563
587
  },
564
- children: !isHidden && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
588
+ children: shouldRenderContent && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
565
589
  "div",
566
590
  {
567
591
  style: {
568
592
  boxSizing: "border-box",
593
+ display: isHidden ? "none" : "block",
569
594
  height: "100%",
570
595
  overflow: "auto",
571
- padding: ((_d = sizes[index]) != null ? _d : 0) < 32 ? 0 : 16,
596
+ padding: ((_e = sizes[index]) != null ? _e : 0) < 32 ? 0 : 16,
572
597
  width: "100%"
573
598
  },
574
599
  children: panel.props.children
@@ -580,7 +605,10 @@ var CustomSplitter = ({
580
605
  "div",
581
606
  {
582
607
  "aria-orientation": resolvedOrientation,
583
- onDoubleClick: resetSizes,
608
+ onDoubleClick: () => {
609
+ onDraggerDoubleClick == null ? void 0 : onDraggerDoubleClick(index);
610
+ resetSizes();
611
+ },
584
612
  onKeyDown: (event) => {
585
613
  const step = event.shiftKey ? 40 : 10;
586
614
  const directionMap = resolvedOrientation === "horizontal" ? { ArrowLeft: -step, ArrowRight: step } : { ArrowUp: -step, ArrowDown: step };
@@ -606,7 +634,8 @@ var CustomSplitter = ({
606
634
  outline: "none",
607
635
  position: "relative",
608
636
  userSelect: "none",
609
- zIndex: isAnyCollapsed ? 2 : 1
637
+ zIndex: isAnyCollapsed ? 2 : 1,
638
+ ...semanticStyles.dragger
610
639
  },
611
640
  tabIndex: 0,
612
641
  children: [
@@ -718,6 +747,9 @@ var CustomSplitter = ({
718
747
  event.stopPropagation();
719
748
  toggleCollapse(targetIndex, neighborIndex);
720
749
  },
750
+ onDoubleClick: (event) => {
751
+ event.stopPropagation();
752
+ },
721
753
  style: {
722
754
  alignItems: "center",
723
755
  background: "#f3f4f6",
@@ -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/** 面板最大允许尺寸限制 */\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\n/**\n * Splitter 根容器组件属性\n */\nexport type SplitterProps = {\n\t/** 面板集合(必须为 Splitter.Panel) */\n\tchildren: ReactNode;\n\t/** 容器根节点自定义类名 */\n\tclassName?: string;\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/** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */\n\torientation?: SplitterOrientation;\n\t/** 容器根节点自定义 CSS 样式 */\n\tstyle?: CSSProperties;\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 CustomSplitter: SplitterComponent = ({\n\tchildren,\n\tclassName,\n\tdraggerIcon,\n\tdraggerSize = DEFAULT_DRAGGER_SIZE,\n\tlazy = false,\n\tonResize,\n\tonResizeEnd,\n\tonResizeStart,\n\tonCollapse,\n\torientation,\n\tstyle,\n\tvertical = false,\n}) => {\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 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...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\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\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...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{!isHidden && (\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\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={resetSizes}\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}}\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\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\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"]}
package/dist/index.d.cts CHANGED
@@ -37,6 +37,8 @@ type SplitterPanelProps = {
37
37
  collapsible?: SplitterCollapsible;
38
38
  /** 面板初始默认尺寸(支持数字 px 或百分比字符串如 '40%') */
39
39
  defaultSize?: SplitterSize;
40
+ /** 折叠/隐藏时是否销毁面板内容节点(可覆盖 Splitter 根容器上的 destroyOnHidden 属性) */
41
+ destroyOnHidden?: boolean;
40
42
  /** 面板最大允许尺寸限制 */
41
43
  max?: SplitterSize;
42
44
  /** 面板最小允许尺寸限制 */
@@ -48,6 +50,10 @@ type SplitterPanelProps = {
48
50
  /** 面板自定义 CSS 样式 */
49
51
  style?: CSSProperties;
50
52
  };
53
+ type SplitterSemanticDOM = 'root' | 'panel' | 'dragger';
54
+ type SplitterStyle = CSSProperties | Partial<Record<SplitterSemanticDOM, CSSProperties>> | ((info: {
55
+ props: SplitterProps;
56
+ }) => Partial<Record<SplitterSemanticDOM, CSSProperties>> | CSSProperties);
51
57
  /**
52
58
  * Splitter 根容器组件属性
53
59
  */
@@ -56,6 +62,8 @@ type SplitterProps = {
56
62
  children: ReactNode;
57
63
  /** 容器根节点自定义类名 */
58
64
  className?: string;
65
+ /** 折叠/隐藏时是否销毁面板内容节点(默认 false,保留组件状态) */
66
+ destroyOnHidden?: boolean;
59
67
  /** 拖拽分隔条的宽度/高度(单位 px,默认 4) */
60
68
  draggerSize?: number;
61
69
  /** 是否在拖拽结束时才更新视图(默认 false) */
@@ -68,10 +76,12 @@ type SplitterProps = {
68
76
  onResizeEnd?: (sizes: number[]) => void;
69
77
  /** 开始拖拽分隔条时的回调 */
70
78
  onResizeStart?: (sizes: number[]) => void;
79
+ /** 双击拖拽条回调 */
80
+ onDraggerDoubleClick?: (index: number) => void;
71
81
  /** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */
72
82
  orientation?: SplitterOrientation;
73
- /** 容器根节点自定义 CSS 样式 */
74
- style?: CSSProperties;
83
+ /** 容器根节点及各语义化结构(root、panel、dragger)自定义 CSS 样式,支持对象或函数 */
84
+ style?: SplitterStyle;
75
85
  /** 是否垂直分屏(orientation="vertical" 的简写形式) */
76
86
  vertical?: boolean;
77
87
  /** 自定义拖拽手柄图标/节点 */
package/dist/index.d.ts CHANGED
@@ -37,6 +37,8 @@ type SplitterPanelProps = {
37
37
  collapsible?: SplitterCollapsible;
38
38
  /** 面板初始默认尺寸(支持数字 px 或百分比字符串如 '40%') */
39
39
  defaultSize?: SplitterSize;
40
+ /** 折叠/隐藏时是否销毁面板内容节点(可覆盖 Splitter 根容器上的 destroyOnHidden 属性) */
41
+ destroyOnHidden?: boolean;
40
42
  /** 面板最大允许尺寸限制 */
41
43
  max?: SplitterSize;
42
44
  /** 面板最小允许尺寸限制 */
@@ -48,6 +50,10 @@ type SplitterPanelProps = {
48
50
  /** 面板自定义 CSS 样式 */
49
51
  style?: CSSProperties;
50
52
  };
53
+ type SplitterSemanticDOM = 'root' | 'panel' | 'dragger';
54
+ type SplitterStyle = CSSProperties | Partial<Record<SplitterSemanticDOM, CSSProperties>> | ((info: {
55
+ props: SplitterProps;
56
+ }) => Partial<Record<SplitterSemanticDOM, CSSProperties>> | CSSProperties);
51
57
  /**
52
58
  * Splitter 根容器组件属性
53
59
  */
@@ -56,6 +62,8 @@ type SplitterProps = {
56
62
  children: ReactNode;
57
63
  /** 容器根节点自定义类名 */
58
64
  className?: string;
65
+ /** 折叠/隐藏时是否销毁面板内容节点(默认 false,保留组件状态) */
66
+ destroyOnHidden?: boolean;
59
67
  /** 拖拽分隔条的宽度/高度(单位 px,默认 4) */
60
68
  draggerSize?: number;
61
69
  /** 是否在拖拽结束时才更新视图(默认 false) */
@@ -68,10 +76,12 @@ type SplitterProps = {
68
76
  onResizeEnd?: (sizes: number[]) => void;
69
77
  /** 开始拖拽分隔条时的回调 */
70
78
  onResizeStart?: (sizes: number[]) => void;
79
+ /** 双击拖拽条回调 */
80
+ onDraggerDoubleClick?: (index: number) => void;
71
81
  /** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */
72
82
  orientation?: SplitterOrientation;
73
- /** 容器根节点自定义 CSS 样式 */
74
- style?: CSSProperties;
83
+ /** 容器根节点及各语义化结构(root、panel、dragger)自定义 CSS 样式,支持对象或函数 */
84
+ style?: SplitterStyle;
75
85
  /** 是否垂直分屏(orientation="vertical" 的简写形式) */
76
86
  vertical?: boolean;
77
87
  /** 自定义拖拽手柄图标/节点 */
package/dist/index.js CHANGED
@@ -212,20 +212,37 @@ 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 CustomSplitter = ({
216
- children,
217
- className,
218
- draggerIcon,
219
- draggerSize = DEFAULT_DRAGGER_SIZE,
220
- lazy = false,
221
- onResize,
222
- onResizeEnd,
223
- onResizeStart,
224
- onCollapse,
225
- orientation,
226
- style,
227
- vertical = false
228
- }) => {
215
+ var resolveSemanticStyles = (style, infoProps) => {
216
+ if (!style) {
217
+ return {};
218
+ }
219
+ const resolved = typeof style === "function" ? style({ props: infoProps }) : style;
220
+ if (!resolved) {
221
+ return {};
222
+ }
223
+ const hasSemanticKey = "root" in resolved || "panel" in resolved || "dragger" in resolved;
224
+ if (hasSemanticKey) {
225
+ return resolved;
226
+ }
227
+ return { root: resolved };
228
+ };
229
+ var CustomSplitter = (props) => {
230
+ const {
231
+ children,
232
+ className,
233
+ destroyOnHidden = false,
234
+ draggerIcon,
235
+ draggerSize = DEFAULT_DRAGGER_SIZE,
236
+ lazy = false,
237
+ onResize,
238
+ onResizeEnd,
239
+ onResizeStart,
240
+ onCollapse,
241
+ onDraggerDoubleClick,
242
+ orientation,
243
+ style,
244
+ vertical = false
245
+ } = props;
229
246
  const resolvedOrientation = orientation != null ? orientation : vertical ? "vertical" : "horizontal";
230
247
  const rootRef = useRef(null);
231
248
  const sizesRef = useRef([]);
@@ -234,6 +251,7 @@ var CustomSplitter = ({
234
251
  const [hoveredIndex, setHoveredIndex] = useState2(null);
235
252
  const [hoveredCollapsePanelIndex, setHoveredCollapsePanelIndex] = useState2(null);
236
253
  const [sizes, setSizes] = useState2([]);
254
+ const semanticStyles = useMemo(() => resolveSemanticStyles(style, props), [style, props]);
237
255
  const panels = useMemo(
238
256
  () => React.Children.toArray(children).filter(
239
257
  React.isValidElement
@@ -437,7 +455,7 @@ var CustomSplitter = ({
437
455
  overflow: "hidden",
438
456
  position: "relative",
439
457
  width: "100%",
440
- ...style
458
+ ...semanticStyles.root
441
459
  };
442
460
  const renderCollapseButton = (draggerIndex, panelIndex, direction) => {
443
461
  var _a, _b;
@@ -469,6 +487,9 @@ var CustomSplitter = ({
469
487
  event.stopPropagation();
470
488
  toggleCollapse(panelIndex, neighborIndex);
471
489
  },
490
+ onDoubleClick: (event) => {
491
+ event.stopPropagation();
492
+ },
472
493
  style: {
473
494
  alignItems: "center",
474
495
  background: "#fff",
@@ -503,11 +524,13 @@ var CustomSplitter = ({
503
524
  );
504
525
  };
505
526
  return /* @__PURE__ */ jsx3("div", { className, ref: rootRef, style: rootStyle, children: panels.map((panel, index) => {
506
- var _a, _b, _c, _d;
527
+ var _a, _b, _c, _d, _e;
507
528
  const isHidden = sizes[index] <= 1;
508
529
  const isLeftOrTopCollapsed = ((_a = sizes[index]) != null ? _a : 0) <= 1;
509
530
  const isRightOrBottomCollapsed = ((_b = sizes[index + 1]) != null ? _b : 0) <= 1;
510
531
  const isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;
532
+ const panelDestroyOnHidden = (_c = panel.props.destroyOnHidden) != null ? _c : destroyOnHidden;
533
+ const shouldRenderContent = !isHidden || !panelDestroyOnHidden;
511
534
  return /* @__PURE__ */ jsxs2(React.Fragment, { children: [
512
535
  /* @__PURE__ */ jsx3(
513
536
  "div",
@@ -515,23 +538,25 @@ var CustomSplitter = ({
515
538
  style: {
516
539
  background: index % 2 ? "#fff" : "#fafafa",
517
540
  boxSizing: "border-box",
518
- flex: `0 0 ${(_c = sizes[index]) != null ? _c : 0}px`,
541
+ flex: `0 0 ${(_d = sizes[index]) != null ? _d : 0}px`,
519
542
  minHeight: 0,
520
543
  minWidth: 0,
521
544
  overflow: "hidden",
522
545
  position: "relative",
523
546
  boxShadow: hoveredCollapsePanelIndex === index ? "inset 0 0 0 2px #1677ff" : void 0,
524
547
  transition: draggingIndex === null ? "box-shadow 0.2s ease, flex-basis 0.2s ease" : void 0,
548
+ ...semanticStyles.panel,
525
549
  ...panel.props.style
526
550
  },
527
- children: !isHidden && /* @__PURE__ */ jsx3(
551
+ children: shouldRenderContent && /* @__PURE__ */ jsx3(
528
552
  "div",
529
553
  {
530
554
  style: {
531
555
  boxSizing: "border-box",
556
+ display: isHidden ? "none" : "block",
532
557
  height: "100%",
533
558
  overflow: "auto",
534
- padding: ((_d = sizes[index]) != null ? _d : 0) < 32 ? 0 : 16,
559
+ padding: ((_e = sizes[index]) != null ? _e : 0) < 32 ? 0 : 16,
535
560
  width: "100%"
536
561
  },
537
562
  children: panel.props.children
@@ -543,7 +568,10 @@ var CustomSplitter = ({
543
568
  "div",
544
569
  {
545
570
  "aria-orientation": resolvedOrientation,
546
- onDoubleClick: resetSizes,
571
+ onDoubleClick: () => {
572
+ onDraggerDoubleClick == null ? void 0 : onDraggerDoubleClick(index);
573
+ resetSizes();
574
+ },
547
575
  onKeyDown: (event) => {
548
576
  const step = event.shiftKey ? 40 : 10;
549
577
  const directionMap = resolvedOrientation === "horizontal" ? { ArrowLeft: -step, ArrowRight: step } : { ArrowUp: -step, ArrowDown: step };
@@ -569,7 +597,8 @@ var CustomSplitter = ({
569
597
  outline: "none",
570
598
  position: "relative",
571
599
  userSelect: "none",
572
- zIndex: isAnyCollapsed ? 2 : 1
600
+ zIndex: isAnyCollapsed ? 2 : 1,
601
+ ...semanticStyles.dragger
573
602
  },
574
603
  tabIndex: 0,
575
604
  children: [
@@ -681,6 +710,9 @@ var CustomSplitter = ({
681
710
  event.stopPropagation();
682
711
  toggleCollapse(targetIndex, neighborIndex);
683
712
  },
713
+ onDoubleClick: (event) => {
714
+ event.stopPropagation();
715
+ },
684
716
  style: {
685
717
  alignItems: "center",
686
718
  background: "#f3f4f6",
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/** 面板最大允许尺寸限制 */\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\n/**\n * Splitter 根容器组件属性\n */\nexport type SplitterProps = {\n\t/** 面板集合(必须为 Splitter.Panel) */\n\tchildren: ReactNode;\n\t/** 容器根节点自定义类名 */\n\tclassName?: string;\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/** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */\n\torientation?: SplitterOrientation;\n\t/** 容器根节点自定义 CSS 样式 */\n\tstyle?: CSSProperties;\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 CustomSplitter: SplitterComponent = ({\n\tchildren,\n\tclassName,\n\tdraggerIcon,\n\tdraggerSize = DEFAULT_DRAGGER_SIZE,\n\tlazy = false,\n\tonResize,\n\tonResizeEnd,\n\tonResizeStart,\n\tonCollapse,\n\torientation,\n\tstyle,\n\tvertical = false,\n}) => {\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 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...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\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\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...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{!isHidden && (\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\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={resetSizes}\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}}\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\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\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-public-components",
3
- "version": "1.1.8",
3
+ "version": "1.1.10",
4
4
  "description": "React 折叠容器(CollapseBox)与分屏面板(Splitter)组件,零 UI 库依赖",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",