react-public-components 1.1.2 → 1.1.4

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/dist/index.cjs CHANGED
@@ -216,7 +216,7 @@ var CollapseBox_default = CollapsibleBox;
216
216
  // Splitter/index.tsx
217
217
  var import_react2 = __toESM(require("react"), 1);
218
218
  var import_jsx_runtime3 = require("react/jsx-runtime");
219
- var DRAGGER_SIZE = 8;
219
+ var DEFAULT_DRAGGER_SIZE = 4;
220
220
  var SplitterPanel = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children });
221
221
  var isPercentSize = (value) => typeof value === "string" && value.endsWith("%");
222
222
  var parseSize = (value, total, fallback) => {
@@ -234,6 +234,7 @@ var clamp = (value, min, max) => Math.min(Math.max(value, min), max);
234
234
  var CustomSplitter = ({
235
235
  children,
236
236
  className,
237
+ draggerSize = DEFAULT_DRAGGER_SIZE,
237
238
  lazy = false,
238
239
  onResize,
239
240
  onResizeEnd,
@@ -256,7 +257,7 @@ var CustomSplitter = ({
256
257
  ),
257
258
  [children]
258
259
  );
259
- const trackSize = Math.max(0, containerSize - Math.max(0, panels.length - 1) * DRAGGER_SIZE);
260
+ const trackSize = Math.max(0, containerSize - Math.max(0, panels.length - 1) * draggerSize);
260
261
  const getPanelMin = (0, import_react2.useCallback)(
261
262
  (index) => {
262
263
  var _a;
@@ -361,32 +362,18 @@ var CustomSplitter = ({
361
362
  const getResizedPair = (0, import_react2.useCallback)(
362
363
  (sourceSizes, index, delta) => {
363
364
  const nextSizes = [...sourceSizes];
364
- const leftPanel = panels[index];
365
- const rightPanel = panels[index + 1];
366
365
  const leftMin = getPanelMin(index);
367
366
  const rightMin = getPanelMin(index + 1);
368
367
  const leftMax = getPanelMax(index);
369
368
  const rightMax = getPanelMax(index + 1);
370
- let targetLeft = sourceSizes[index] + delta;
371
- let targetRight = sourceSizes[index + 1] - delta;
372
- if ((leftPanel == null ? void 0 : leftPanel.props.collapsible) && leftMin > 0 && targetLeft < leftMin / 2) {
373
- targetLeft = 0;
374
- targetRight = sourceSizes[index] + sourceSizes[index + 1];
375
- } else if ((rightPanel == null ? void 0 : rightPanel.props.collapsible) && rightMin > 0 && targetRight < rightMin / 2) {
376
- targetRight = 0;
377
- targetLeft = sourceSizes[index] + sourceSizes[index + 1];
378
- } else {
379
- const minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);
380
- const maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);
381
- const safeDelta = clamp(delta, minDelta, maxDelta);
382
- targetLeft = sourceSizes[index] + safeDelta;
383
- targetRight = sourceSizes[index + 1] - safeDelta;
384
- }
385
- nextSizes[index] = targetLeft;
386
- nextSizes[index + 1] = targetRight;
369
+ const minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);
370
+ const maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);
371
+ const safeDelta = clamp(delta, minDelta, maxDelta);
372
+ nextSizes[index] = sourceSizes[index] + safeDelta;
373
+ nextSizes[index + 1] = sourceSizes[index + 1] - safeDelta;
387
374
  return normalizeToTrack(nextSizes);
388
375
  },
389
- [getPanelMax, getPanelMin, normalizeToTrack, panels]
376
+ [getPanelMax, getPanelMin, normalizeToTrack]
390
377
  );
391
378
  const resizePair = (0, import_react2.useCallback)(
392
379
  (index, delta, notify = true) => {
@@ -497,157 +484,147 @@ var CustomSplitter = ({
497
484
  }
498
485
  );
499
486
  };
500
- const renderCollapsedExpandHandle = (panelIndex) => {
501
- var _a;
502
- const panel = panels[panelIndex];
503
- if (!(panel == null ? void 0 : panel.props.collapsible)) {
504
- return null;
505
- }
506
- const isCollapsed = sizes.length > 0 && ((_a = sizes[panelIndex]) != null ? _a : 0) <= 1;
507
- if (!isCollapsed) {
508
- return null;
509
- }
510
- const isFirstPanel = panelIndex === 0;
511
- const neighborIndex = isFirstPanel ? panelIndex + 1 : panelIndex - 1;
512
- const Icon = resolvedOrientation === "horizontal" ? isFirstPanel ? RightOutlined : LeftOutlined : isFirstPanel ? DownOutlined : UpOutlined;
513
- const label = resolvedOrientation === "horizontal" ? isFirstPanel ? "\u5C55\u5F00\u5DE6\u4FA7\u9762\u677F" : "\u5C55\u5F00\u53F3\u4FA7\u9762\u677F" : isFirstPanel ? "\u5C55\u5F00\u4E0A\u65B9\u9762\u677F" : "\u5C55\u5F00\u4E0B\u65B9\u9762\u677F";
514
- const positionStyle = resolvedOrientation === "horizontal" ? isFirstPanel ? { left: 8, top: "50%", transform: "translateY(-50%)" } : { right: 8, top: "50%", transform: "translateY(-50%)" } : isFirstPanel ? { top: 8, left: "50%", transform: "translateX(-50%)" } : { bottom: 8, left: "50%", transform: "translateX(-50%)" };
515
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
516
- "button",
517
- {
518
- "aria-label": label,
519
- title: label,
520
- onClick: (event) => {
521
- event.stopPropagation();
522
- toggleCollapse(panelIndex, neighborIndex);
523
- },
524
- style: {
525
- position: "absolute",
526
- alignItems: "center",
527
- background: "#fff",
528
- border: "1px solid #1677ff",
529
- borderRadius: 4,
530
- color: "#1677ff",
531
- cursor: "pointer",
532
- display: "flex",
533
- height: 24,
534
- justifyContent: "center",
535
- padding: 0,
536
- width: 24,
537
- fontSize: 12,
538
- boxShadow: "0 2px 8px rgba(22, 119, 255, 0.35)",
539
- zIndex: 20,
540
- ...positionStyle
541
- },
542
- type: "button",
543
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, {})
544
- },
545
- `collapsed-handle-${panelIndex}`
546
- );
547
- };
548
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className, ref: rootRef, style: rootStyle, children: [
549
- panels.map((panel, index) => {
550
- var _a, _b, _c;
551
- const isHidden = sizes[index] <= 1;
552
- const isLeftOrTopCollapsed = ((_a = sizes[index]) != null ? _a : 0) <= 1;
553
- const isRightOrBottomCollapsed = ((_b = sizes[index + 1]) != null ? _b : 0) <= 1;
554
- const isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;
555
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react2.default.Fragment, { children: [
556
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
557
- "div",
558
- {
559
- style: {
560
- background: index % 2 ? "#fff" : "#fafafa",
561
- boxSizing: "border-box",
562
- flex: `0 0 ${(_c = sizes[index]) != null ? _c : 0}px`,
563
- minHeight: 0,
564
- minWidth: 0,
565
- overflow: "auto",
566
- padding: isHidden ? 0 : 16,
567
- transition: draggingIndex === null ? "flex-basis 0.2s ease" : void 0,
568
- ...panel.props.style
569
- },
570
- children: !isHidden && panel.props.children
571
- }
572
- ),
573
- index < panels.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
574
- "div",
575
- {
576
- "aria-orientation": resolvedOrientation,
577
- onClick: () => {
578
- if (isRightOrBottomCollapsed) {
579
- toggleCollapse(index + 1, index);
580
- } else if (isLeftOrTopCollapsed) {
581
- toggleCollapse(index, index + 1);
487
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className, ref: rootRef, style: rootStyle, children: panels.map((panel, index) => {
488
+ var _a, _b, _c;
489
+ const isHidden = sizes[index] <= 1;
490
+ const isLeftOrTopCollapsed = ((_a = sizes[index]) != null ? _a : 0) <= 1;
491
+ const isRightOrBottomCollapsed = ((_b = sizes[index + 1]) != null ? _b : 0) <= 1;
492
+ const isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;
493
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react2.default.Fragment, { children: [
494
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
495
+ "div",
496
+ {
497
+ style: {
498
+ background: index % 2 ? "#fff" : "#fafafa",
499
+ boxSizing: "border-box",
500
+ flex: `0 0 ${(_c = sizes[index]) != null ? _c : 0}px`,
501
+ minHeight: 0,
502
+ minWidth: 0,
503
+ overflow: "auto",
504
+ padding: isHidden ? 0 : 16,
505
+ transition: draggingIndex === null ? "flex-basis 0.2s ease" : void 0,
506
+ ...panel.props.style
507
+ },
508
+ children: !isHidden && panel.props.children
509
+ }
510
+ ),
511
+ index < panels.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
512
+ "div",
513
+ {
514
+ "aria-orientation": resolvedOrientation,
515
+ onDoubleClick: resetSizes,
516
+ onKeyDown: (event) => {
517
+ const step = event.shiftKey ? 40 : 10;
518
+ const directionMap = resolvedOrientation === "horizontal" ? { ArrowLeft: -step, ArrowRight: step } : { ArrowUp: -step, ArrowDown: step };
519
+ const delta = directionMap[event.key];
520
+ if (delta !== void 0) {
521
+ event.preventDefault();
522
+ resizePair(index, delta);
523
+ }
524
+ },
525
+ onPointerDown: (event) => startResize(index, event),
526
+ onPointerEnter: () => setHoveredIndex(index),
527
+ onPointerLeave: () => setHoveredIndex(null),
528
+ role: "separator",
529
+ title: "\u62D6\u52A8\u8C03\u6574\u5927\u5C0F\uFF0C\u53CC\u51FB\u91CD\u7F6E",
530
+ style: {
531
+ alignItems: "center",
532
+ background: hoveredIndex === index || draggingIndex === index ? "#e6f4ff" : "#f5f5f5",
533
+ boxSizing: "border-box",
534
+ cursor: resolvedOrientation === "horizontal" ? "col-resize" : "row-resize",
535
+ display: "flex",
536
+ flex: `0 0 ${draggerSize}px`,
537
+ justifyContent: "center",
538
+ outline: "none",
539
+ position: "relative",
540
+ userSelect: "none",
541
+ zIndex: isAnyCollapsed ? 2 : 1
542
+ },
543
+ tabIndex: 0,
544
+ children: [
545
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
546
+ "div",
547
+ {
548
+ style: {
549
+ background: hoveredIndex === index || draggingIndex === index || isAnyCollapsed ? "#1677ff" : "#d9d9d9",
550
+ borderRadius: 2,
551
+ height: resolvedOrientation === "horizontal" ? 48 : 2,
552
+ width: resolvedOrientation === "horizontal" ? 2 : 48
553
+ }
582
554
  }
583
- },
584
- onDoubleClick: resetSizes,
585
- onKeyDown: (event) => {
586
- const step = event.shiftKey ? 40 : 10;
587
- const directionMap = resolvedOrientation === "horizontal" ? { ArrowLeft: -step, ArrowRight: step } : { ArrowUp: -step, ArrowDown: step };
588
- const delta = directionMap[event.key];
589
- if (delta !== void 0) {
590
- event.preventDefault();
591
- resizePair(index, delta);
555
+ ),
556
+ !isAnyCollapsed && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
557
+ "div",
558
+ {
559
+ style: {
560
+ position: "absolute",
561
+ display: "flex",
562
+ flexDirection: resolvedOrientation === "horizontal" ? "column" : "row",
563
+ gap: 4,
564
+ opacity: hoveredIndex === index || draggingIndex === index ? 1 : 0,
565
+ pointerEvents: hoveredIndex === index || draggingIndex === index ? "auto" : "none",
566
+ transition: "opacity 0.15s ease",
567
+ zIndex: 5
568
+ },
569
+ children: [
570
+ renderCollapseButton(index, index, "start"),
571
+ renderCollapseButton(index, index + 1, "end")
572
+ ]
592
573
  }
593
- },
594
- onPointerDown: (event) => startResize(index, event),
595
- onPointerEnter: () => setHoveredIndex(index),
596
- onPointerLeave: () => setHoveredIndex(null),
597
- role: "separator",
598
- title: isAnyCollapsed ? "\u70B9\u51FB\u53EF\u5C55\u5F00\u6062\u590D\u9762\u677F" : "\u62D6\u52A8\u8C03\u6574\u5927\u5C0F\uFF0C\u53CC\u51FB\u91CD\u7F6E",
599
- style: {
600
- alignItems: "center",
601
- background: hoveredIndex === index || draggingIndex === index || isAnyCollapsed ? "#e6f4ff" : "#f5f5f5",
602
- boxSizing: "border-box",
603
- cursor: isAnyCollapsed ? "pointer" : resolvedOrientation === "horizontal" ? "col-resize" : "row-resize",
604
- display: "flex",
605
- flex: `0 0 ${DRAGGER_SIZE}px`,
606
- justifyContent: "center",
607
- outline: "none",
608
- position: "relative",
609
- userSelect: "none",
610
- zIndex: isAnyCollapsed ? 2 : 1
611
- },
612
- tabIndex: 0,
613
- children: [
614
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
615
- "div",
616
- {
617
- style: {
618
- background: hoveredIndex === index || draggingIndex === index || isAnyCollapsed ? "#1677ff" : "#d9d9d9",
619
- borderRadius: 2,
620
- height: resolvedOrientation === "horizontal" ? 48 : 2,
621
- width: resolvedOrientation === "horizontal" ? 2 : 48
622
- }
623
- }
624
- ),
625
- !isAnyCollapsed && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
626
- "div",
627
- {
628
- style: {
629
- position: "absolute",
630
- display: "flex",
631
- flexDirection: resolvedOrientation === "horizontal" ? "column" : "row",
632
- gap: 4,
633
- opacity: hoveredIndex === index ? 1 : 0.85,
634
- transition: "opacity 0.15s ease",
635
- pointerEvents: "auto",
636
- zIndex: 5
637
- },
638
- children: [
639
- renderCollapseButton(index, index, "start"),
640
- renderCollapseButton(index, index + 1, "end")
641
- ]
642
- }
643
- )
644
- ]
645
- }
646
- )
647
- ] }, index);
648
- }),
649
- panels.map((_, index) => renderCollapsedExpandHandle(index))
650
- ] });
574
+ ),
575
+ isAnyCollapsed && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
576
+ "div",
577
+ {
578
+ style: {
579
+ position: "absolute",
580
+ display: "flex",
581
+ alignItems: "center",
582
+ justifyContent: "center",
583
+ opacity: hoveredIndex === index || draggingIndex === index ? 1 : 0,
584
+ pointerEvents: hoveredIndex === index || draggingIndex === index ? "auto" : "none",
585
+ transition: "opacity 0.15s ease",
586
+ zIndex: 5
587
+ },
588
+ children: (() => {
589
+ const ExpandIcon = resolvedOrientation === "horizontal" ? isLeftOrTopCollapsed ? RightOutlined : LeftOutlined : isLeftOrTopCollapsed ? DownOutlined : UpOutlined;
590
+ const targetIndex = isLeftOrTopCollapsed ? index : index + 1;
591
+ const neighborIndex = isLeftOrTopCollapsed ? index + 1 : index;
592
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
593
+ "button",
594
+ {
595
+ "aria-label": "\u5C55\u5F00\u9762\u677F",
596
+ title: "\u5C55\u5F00\u9762\u677F",
597
+ onClick: (event) => {
598
+ event.stopPropagation();
599
+ toggleCollapse(targetIndex, neighborIndex);
600
+ },
601
+ style: {
602
+ alignItems: "center",
603
+ background: "#fff",
604
+ border: "1px solid #1677ff",
605
+ borderRadius: 4,
606
+ color: "#1677ff",
607
+ cursor: "pointer",
608
+ display: "flex",
609
+ height: 20,
610
+ justifyContent: "center",
611
+ padding: 0,
612
+ width: 20,
613
+ fontSize: 12,
614
+ boxShadow: "0 2px 4px rgba(0,0,0,0.12)"
615
+ },
616
+ type: "button",
617
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ExpandIcon, {})
618
+ }
619
+ );
620
+ })()
621
+ }
622
+ )
623
+ ]
624
+ }
625
+ )
626
+ ] }, index);
627
+ }) });
651
628
  };
652
629
  CustomSplitter.Panel = SplitterPanel;
653
630
  var Splitter_default = CustomSplitter;
@@ -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\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 SplitterPanelProps = {\n\tchildren?: ReactNode;\n\tcollapsible?: boolean;\n\tdefaultSize?: SplitterSize;\n\tmax?: SplitterSize;\n\tmin?: SplitterSize;\n\tresizable?: boolean;\n\tsize?: SplitterSize;\n\tstyle?: CSSProperties;\n};\n\nexport type SplitterProps = {\n\tchildren: ReactNode;\n\tclassName?: string;\n\tlazy?: boolean;\n\tonResize?: (sizes: number[]) => void;\n\tonResizeEnd?: (sizes: number[]) => void;\n\tonResizeStart?: (sizes: number[]) => void;\n\torientation?: SplitterOrientation;\n\tstyle?: CSSProperties;\n\tvertical?: boolean;\n};\n\ntype SplitterComponent = React.FC<SplitterProps> & {\n\tPanel: React.FC<SplitterPanelProps>;\n};\n\nconst DRAGGER_SIZE = 8;\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\tlazy = false,\n\tonResize,\n\tonResizeEnd,\n\tonResizeStart,\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 lastNonZeroSizesRef = 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 [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) * DRAGGER_SIZE);\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\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\tnormalized.forEach((size, index) => {\n\t\t\t\tif (size > 1) {\n\t\t\t\t\tlastNonZeroSizesRef.current[index] = size;\n\t\t\t\t}\n\t\t\t});\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\tlastNonZeroSizesRef.current = nextSizes.map((size) =>\n\t\t\t\tMath.max(size, trackSize / Math.max(panels.length, 1)),\n\t\t\t);\n\t\t\treturn nextSizes;\n\t\t});\n\t}, [buildInitialSizes, panels.length, trackSize]);\n\n\tconst getResizedPair = useCallback(\n\t\t(sourceSizes: number[], index: number, delta: number) => {\n\t\t\tconst nextSizes = [...sourceSizes];\n\t\t\tconst leftPanel = panels[index];\n\t\t\tconst rightPanel = panels[index + 1];\n\n\t\t\tconst leftMin = getPanelMin(index);\n\t\t\tconst rightMin = getPanelMin(index + 1);\n\t\t\tconst leftMax = getPanelMax(index);\n\t\t\tconst rightMax = getPanelMax(index + 1);\n\n\t\t\tlet targetLeft = sourceSizes[index] + delta;\n\t\t\tlet targetRight = sourceSizes[index + 1] - delta;\n\n\t\t\t// 如果面板可折叠且设置了 min > 0,当拖拽目标尺寸小于 min / 2 时可自动吸附折叠到 0\n\t\t\tif (leftPanel?.props.collapsible && leftMin > 0 && targetLeft < leftMin / 2) {\n\t\t\t\ttargetLeft = 0;\n\t\t\t\ttargetRight = sourceSizes[index] + sourceSizes[index + 1];\n\t\t\t} else if (rightPanel?.props.collapsible && rightMin > 0 && targetRight < rightMin / 2) {\n\t\t\t\ttargetRight = 0;\n\t\t\t\ttargetLeft = sourceSizes[index] + sourceSizes[index + 1];\n\t\t\t} else {\n\t\t\t\tconst minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);\n\t\t\t\tconst maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);\n\t\t\t\tconst safeDelta = clamp(delta, minDelta, maxDelta);\n\n\t\t\t\ttargetLeft = sourceSizes[index] + safeDelta;\n\t\t\t\ttargetRight = sourceSizes[index + 1] - safeDelta;\n\t\t\t}\n\n\t\t\tnextSizes[index] = targetLeft;\n\t\t\tnextSizes[index + 1] = targetRight;\n\t\t\treturn normalizeToTrack(nextSizes);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack, panels],\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\tonResizeEnd?.(roundSizes(sizesRef.current));\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\tlastNonZeroSizesRef.current[index] = nextSizes[index];\n\t\t\tnextSizes[neighborIndex] += nextSizes[index];\n\t\t\tnextSizes[index] = 0;\n\t\t} else {\n\t\t\tconst restoredSize =\n\t\t\t\tlastNonZeroSizesRef.current[index] ||\n\t\t\t\tparseSize(panels[index].props.defaultSize, trackSize, trackSize / panels.length);\n\t\t\tnextSizes[index] = clamp(restoredSize, getPanelMin(index), getPanelMax(index));\n\t\t\tnextSizes[neighborIndex] = Math.max(0, nextSizes[neighborIndex] - nextSizes[index]);\n\t\t}\n\n\t\tupdateSizes(nextSizes);\n\t\tonResizeEnd?.(roundSizes(sizesRef.current));\n\t};\n\n\tconst resetSizes = () => {\n\t\tconst nextSizes = buildInitialSizes();\n\t\tupdateSizes(nextSizes);\n\t\tonResizeEnd?.(roundSizes(nextSizes));\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\tif (!panel?.props.collapsible) {\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\treturn (\n\t\t\t<button\n\t\t\t\taria-label=\"折叠面板\"\n\t\t\t\ttitle=\"折叠面板\"\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: 4,\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: 20,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\twidth: 20,\n\t\t\t\t\tfontSize: 12,\n\t\t\t\t\tboxShadow: '0 2px 4px rgba(0,0,0,0.08)',\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\n\t\t\t>\n\t\t\t\t<Icon />\n\t\t\t</button>\n\t\t);\n\t};\n\n\t// 渲染处于折叠状态下的“展开”触发手柄(挂载在根容器内侧 8px 处,100% 常显、绝对不被裁剪)\n\tconst renderCollapsedExpandHandle = (panelIndex: number) => {\n\t\tconst panel = panels[panelIndex];\n\t\tif (!panel?.props.collapsible) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst isCollapsed = sizes.length > 0 && (sizes[panelIndex] ?? 0) <= 1;\n\t\tif (!isCollapsed) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst isFirstPanel = panelIndex === 0;\n\t\tconst neighborIndex = isFirstPanel ? panelIndex + 1 : panelIndex - 1;\n\n\t\tconst Icon =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? isFirstPanel\n\t\t\t\t\t? RightOutlined // 左面板折叠后,图标指向右 > (展开左面板)\n\t\t\t\t\t: LeftOutlined // 右面板折叠后,图标指向左 < (展开右面板)\n\t\t\t\t: isFirstPanel\n\t\t\t\t\t? DownOutlined\n\t\t\t\t\t: UpOutlined;\n\n\t\tconst label =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? isFirstPanel\n\t\t\t\t\t? '展开左侧面板'\n\t\t\t\t\t: '展开右侧面板'\n\t\t\t\t: isFirstPanel\n\t\t\t\t\t? '展开上方面板'\n\t\t\t\t\t: '展开下方面板';\n\n\t\tconst positionStyle: CSSProperties =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? isFirstPanel\n\t\t\t\t\t? { left: 8, top: '50%', transform: 'translateY(-50%)' }\n\t\t\t\t\t: { right: 8, top: '50%', transform: 'translateY(-50%)' }\n\t\t\t\t: isFirstPanel\n\t\t\t\t\t? { top: 8, left: '50%', transform: 'translateX(-50%)' }\n\t\t\t\t\t: { bottom: 8, left: '50%', transform: 'translateX(-50%)' };\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\taria-label={label}\n\t\t\t\tkey={`collapsed-handle-${panelIndex}`}\n\t\t\t\ttitle={label}\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\tposition: 'absolute',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\tborder: '1px solid #1677ff',\n\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\tcolor: '#1677ff',\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\theight: 24,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\twidth: 24,\n\t\t\t\t\tfontSize: 12,\n\t\t\t\t\tboxShadow: '0 2px 8px rgba(22, 119, 255, 0.35)',\n\t\t\t\t\tzIndex: 20,\n\t\t\t\t\t...positionStyle,\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\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: 'auto',\n\t\t\t\t\t\t\t\tpadding: isHidden ? 0 : 16,\n\t\t\t\t\t\t\t\ttransition: draggingIndex === null ? '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 && panel.props.children}\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\tonClick={() => {\n\t\t\t\t\t\t\t\t\tif (isRightOrBottomCollapsed) {\n\t\t\t\t\t\t\t\t\t\ttoggleCollapse(index + 1, index);\n\t\t\t\t\t\t\t\t\t} else if (isLeftOrTopCollapsed) {\n\t\t\t\t\t\t\t\t\t\ttoggleCollapse(index, index + 1);\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\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={isAnyCollapsed ? '点击可展开恢复面板' : '拖动调整大小,双击重置'}\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 || isAnyCollapsed\n\t\t\t\t\t\t\t\t\t\t\t? '#e6f4ff'\n\t\t\t\t\t\t\t\t\t\t\t: '#f5f5f5',\n\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\tcursor: isAnyCollapsed\n\t\t\t\t\t\t\t\t\t\t? 'pointer'\n\t\t\t\t\t\t\t\t\t\t: resolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? 'col-resize'\n\t\t\t\t\t\t\t\t\t\t\t: '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 ${DRAGGER_SIZE}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<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index || isAnyCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t? '#1677ff'\n\t\t\t\t\t\t\t\t\t\t\t\t: '#d9d9d9',\n\t\t\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\t\t\theight: resolvedOrientation === 'horizontal' ? 48 : 2,\n\t\t\t\t\t\t\t\t\t\twidth: resolvedOrientation === 'horizontal' ? 2 : 48,\n\t\t\t\t\t\t\t\t\t}}\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\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'column' : 'row',\n\t\t\t\t\t\t\t\t\t\t\tgap: 4,\n\t\t\t\t\t\t\t\t\t\t\topacity: hoveredIndex === index ? 1 : 0.85,\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'opacity 0.15s ease',\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}}\n\t\t\t\t\t\t\t\t\t>\n\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{renderCollapseButton(index, index + 1, 'end')}\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\n\t\t\t{/* 当有面板处于折叠状态时,在根容器内部边缘常显渲染展开手柄 */}\n\t\t\t{panels.map((_, index) => renderCollapsedExpandHandle(index))}\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\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 SplitterPanelProps = {\n\tchildren?: ReactNode;\n\tcollapsible?: boolean;\n\tdefaultSize?: SplitterSize;\n\tmax?: SplitterSize;\n\tmin?: SplitterSize;\n\tresizable?: boolean;\n\tsize?: SplitterSize;\n\tstyle?: CSSProperties;\n};\n\nexport type SplitterProps = {\n\tchildren: ReactNode;\n\tclassName?: string;\n\tdraggerSize?: number;\n\tlazy?: boolean;\n\tonResize?: (sizes: number[]) => void;\n\tonResizeEnd?: (sizes: number[]) => void;\n\tonResizeStart?: (sizes: number[]) => void;\n\torientation?: SplitterOrientation;\n\tstyle?: CSSProperties;\n\tvertical?: boolean;\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\tdraggerSize = DEFAULT_DRAGGER_SIZE,\n\tlazy = false,\n\tonResize,\n\tonResizeEnd,\n\tonResizeStart,\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 lastNonZeroSizesRef = 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 [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\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\tnormalized.forEach((size, index) => {\n\t\t\t\tif (size > 1) {\n\t\t\t\t\tlastNonZeroSizesRef.current[index] = size;\n\t\t\t\t}\n\t\t\t});\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\tlastNonZeroSizesRef.current = nextSizes.map((size) =>\n\t\t\t\tMath.max(size, trackSize / Math.max(panels.length, 1)),\n\t\t\t);\n\t\t\treturn nextSizes;\n\t\t});\n\t}, [buildInitialSizes, panels.length, trackSize]);\n\n\tconst getResizedPair = useCallback(\n\t\t(sourceSizes: number[], index: number, delta: number) => {\n\t\t\tconst nextSizes = [...sourceSizes];\n\t\t\tconst leftMin = getPanelMin(index);\n\t\t\tconst rightMin = 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\tonResizeEnd?.(roundSizes(sizesRef.current));\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\tlastNonZeroSizesRef.current[index] = nextSizes[index];\n\t\t\tnextSizes[neighborIndex] += nextSizes[index];\n\t\t\tnextSizes[index] = 0;\n\t\t} else {\n\t\t\tconst restoredSize =\n\t\t\t\tlastNonZeroSizesRef.current[index] ||\n\t\t\t\tparseSize(panels[index].props.defaultSize, trackSize, trackSize / panels.length);\n\t\t\tnextSizes[index] = clamp(restoredSize, getPanelMin(index), getPanelMax(index));\n\t\t\tnextSizes[neighborIndex] = Math.max(0, nextSizes[neighborIndex] - nextSizes[index]);\n\t\t}\n\n\t\tupdateSizes(nextSizes);\n\t\tonResizeEnd?.(roundSizes(sizesRef.current));\n\t};\n\n\tconst resetSizes = () => {\n\t\tconst nextSizes = buildInitialSizes();\n\t\tupdateSizes(nextSizes);\n\t\tonResizeEnd?.(roundSizes(nextSizes));\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\tif (!panel?.props.collapsible) {\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\treturn (\n\t\t\t<button\n\t\t\t\taria-label=\"折叠面板\"\n\t\t\t\ttitle=\"折叠面板\"\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: 4,\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: 20,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\twidth: 20,\n\t\t\t\t\tfontSize: 12,\n\t\t\t\t\tboxShadow: '0 2px 4px rgba(0,0,0,0.08)',\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\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: 'auto',\n\t\t\t\t\t\t\t\tpadding: isHidden ? 0 : 16,\n\t\t\t\t\t\t\t\ttransition: draggingIndex === null ? '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 && panel.props.children}\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\n\t\t\t\t\t\t\t\t\t\t\t? '#e6f4ff'\n\t\t\t\t\t\t\t\t\t\t\t: '#f5f5f5',\n\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\tcursor:\n\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? 'col-resize'\n\t\t\t\t\t\t\t\t\t\t\t: '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<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index || isAnyCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t? '#1677ff'\n\t\t\t\t\t\t\t\t\t\t\t\t: '#d9d9d9',\n\t\t\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\t\t\theight: resolvedOrientation === 'horizontal' ? 48 : 2,\n\t\t\t\t\t\t\t\t\t\twidth: resolvedOrientation === 'horizontal' ? 2 : 48,\n\t\t\t\t\t\t\t\t\t}}\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\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'column' : 'row',\n\t\t\t\t\t\t\t\t\t\t\tgap: 4,\n\t\t\t\t\t\t\t\t\t\t\topacity: hoveredIndex === index || draggingIndex === index ? 1 : 0,\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents:\n\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? 'auto' : 'none',\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'opacity 0.15s ease',\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{renderCollapseButton(index, index, 'start')}\n\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</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* 折叠状态下呈现展开按钮(默认隐藏,鼠标移动到拖拽区域时显示,且仅点击 icon 展开) */}\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\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: hoveredIndex === index || draggingIndex === index ? 1 : 0,\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents:\n\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? 'auto' : 'none',\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'opacity 0.15s ease',\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{(() => {\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 targetIndex = isLeftOrTopCollapsed ? index : index + 1;\n\t\t\t\t\t\t\t\t\t\t\tconst neighborIndex = isLeftOrTopCollapsed ? index + 1 : index;\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=\"展开面板\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"展开面板\"\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: '#fff',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: '1px solid #1677ff',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: '#1677ff',\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: 20,\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\twidth: 20,\n\t\t\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\t\t\tboxShadow: '0 2px 4px rgba(0,0,0,0.12)',\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>\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
@@ -31,6 +31,7 @@ type SplitterPanelProps = {
31
31
  type SplitterProps = {
32
32
  children: ReactNode;
33
33
  className?: string;
34
+ draggerSize?: number;
34
35
  lazy?: boolean;
35
36
  onResize?: (sizes: number[]) => void;
36
37
  onResizeEnd?: (sizes: number[]) => void;
package/dist/index.d.ts CHANGED
@@ -31,6 +31,7 @@ type SplitterPanelProps = {
31
31
  type SplitterProps = {
32
32
  children: ReactNode;
33
33
  className?: string;
34
+ draggerSize?: number;
34
35
  lazy?: boolean;
35
36
  onResize?: (sizes: number[]) => void;
36
37
  onResizeEnd?: (sizes: number[]) => void;
package/dist/index.js CHANGED
@@ -179,7 +179,7 @@ var CollapseBox_default = CollapsibleBox;
179
179
  // Splitter/index.tsx
180
180
  import React, { useCallback, useEffect, useMemo, useRef, useState as useState2 } from "react";
181
181
  import { Fragment, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
182
- var DRAGGER_SIZE = 8;
182
+ var DEFAULT_DRAGGER_SIZE = 4;
183
183
  var SplitterPanel = ({ children }) => /* @__PURE__ */ jsx3(Fragment, { children });
184
184
  var isPercentSize = (value) => typeof value === "string" && value.endsWith("%");
185
185
  var parseSize = (value, total, fallback) => {
@@ -197,6 +197,7 @@ var clamp = (value, min, max) => Math.min(Math.max(value, min), max);
197
197
  var CustomSplitter = ({
198
198
  children,
199
199
  className,
200
+ draggerSize = DEFAULT_DRAGGER_SIZE,
200
201
  lazy = false,
201
202
  onResize,
202
203
  onResizeEnd,
@@ -219,7 +220,7 @@ var CustomSplitter = ({
219
220
  ),
220
221
  [children]
221
222
  );
222
- const trackSize = Math.max(0, containerSize - Math.max(0, panels.length - 1) * DRAGGER_SIZE);
223
+ const trackSize = Math.max(0, containerSize - Math.max(0, panels.length - 1) * draggerSize);
223
224
  const getPanelMin = useCallback(
224
225
  (index) => {
225
226
  var _a;
@@ -324,32 +325,18 @@ var CustomSplitter = ({
324
325
  const getResizedPair = useCallback(
325
326
  (sourceSizes, index, delta) => {
326
327
  const nextSizes = [...sourceSizes];
327
- const leftPanel = panels[index];
328
- const rightPanel = panels[index + 1];
329
328
  const leftMin = getPanelMin(index);
330
329
  const rightMin = getPanelMin(index + 1);
331
330
  const leftMax = getPanelMax(index);
332
331
  const rightMax = getPanelMax(index + 1);
333
- let targetLeft = sourceSizes[index] + delta;
334
- let targetRight = sourceSizes[index + 1] - delta;
335
- if ((leftPanel == null ? void 0 : leftPanel.props.collapsible) && leftMin > 0 && targetLeft < leftMin / 2) {
336
- targetLeft = 0;
337
- targetRight = sourceSizes[index] + sourceSizes[index + 1];
338
- } else if ((rightPanel == null ? void 0 : rightPanel.props.collapsible) && rightMin > 0 && targetRight < rightMin / 2) {
339
- targetRight = 0;
340
- targetLeft = sourceSizes[index] + sourceSizes[index + 1];
341
- } else {
342
- const minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);
343
- const maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);
344
- const safeDelta = clamp(delta, minDelta, maxDelta);
345
- targetLeft = sourceSizes[index] + safeDelta;
346
- targetRight = sourceSizes[index + 1] - safeDelta;
347
- }
348
- nextSizes[index] = targetLeft;
349
- nextSizes[index + 1] = targetRight;
332
+ const minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);
333
+ const maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);
334
+ const safeDelta = clamp(delta, minDelta, maxDelta);
335
+ nextSizes[index] = sourceSizes[index] + safeDelta;
336
+ nextSizes[index + 1] = sourceSizes[index + 1] - safeDelta;
350
337
  return normalizeToTrack(nextSizes);
351
338
  },
352
- [getPanelMax, getPanelMin, normalizeToTrack, panels]
339
+ [getPanelMax, getPanelMin, normalizeToTrack]
353
340
  );
354
341
  const resizePair = useCallback(
355
342
  (index, delta, notify = true) => {
@@ -460,157 +447,147 @@ var CustomSplitter = ({
460
447
  }
461
448
  );
462
449
  };
463
- const renderCollapsedExpandHandle = (panelIndex) => {
464
- var _a;
465
- const panel = panels[panelIndex];
466
- if (!(panel == null ? void 0 : panel.props.collapsible)) {
467
- return null;
468
- }
469
- const isCollapsed = sizes.length > 0 && ((_a = sizes[panelIndex]) != null ? _a : 0) <= 1;
470
- if (!isCollapsed) {
471
- return null;
472
- }
473
- const isFirstPanel = panelIndex === 0;
474
- const neighborIndex = isFirstPanel ? panelIndex + 1 : panelIndex - 1;
475
- const Icon = resolvedOrientation === "horizontal" ? isFirstPanel ? RightOutlined : LeftOutlined : isFirstPanel ? DownOutlined : UpOutlined;
476
- const label = resolvedOrientation === "horizontal" ? isFirstPanel ? "\u5C55\u5F00\u5DE6\u4FA7\u9762\u677F" : "\u5C55\u5F00\u53F3\u4FA7\u9762\u677F" : isFirstPanel ? "\u5C55\u5F00\u4E0A\u65B9\u9762\u677F" : "\u5C55\u5F00\u4E0B\u65B9\u9762\u677F";
477
- const positionStyle = resolvedOrientation === "horizontal" ? isFirstPanel ? { left: 8, top: "50%", transform: "translateY(-50%)" } : { right: 8, top: "50%", transform: "translateY(-50%)" } : isFirstPanel ? { top: 8, left: "50%", transform: "translateX(-50%)" } : { bottom: 8, left: "50%", transform: "translateX(-50%)" };
478
- return /* @__PURE__ */ jsx3(
479
- "button",
480
- {
481
- "aria-label": label,
482
- title: label,
483
- onClick: (event) => {
484
- event.stopPropagation();
485
- toggleCollapse(panelIndex, neighborIndex);
486
- },
487
- style: {
488
- position: "absolute",
489
- alignItems: "center",
490
- background: "#fff",
491
- border: "1px solid #1677ff",
492
- borderRadius: 4,
493
- color: "#1677ff",
494
- cursor: "pointer",
495
- display: "flex",
496
- height: 24,
497
- justifyContent: "center",
498
- padding: 0,
499
- width: 24,
500
- fontSize: 12,
501
- boxShadow: "0 2px 8px rgba(22, 119, 255, 0.35)",
502
- zIndex: 20,
503
- ...positionStyle
504
- },
505
- type: "button",
506
- children: /* @__PURE__ */ jsx3(Icon, {})
507
- },
508
- `collapsed-handle-${panelIndex}`
509
- );
510
- };
511
- return /* @__PURE__ */ jsxs2("div", { className, ref: rootRef, style: rootStyle, children: [
512
- panels.map((panel, index) => {
513
- var _a, _b, _c;
514
- const isHidden = sizes[index] <= 1;
515
- const isLeftOrTopCollapsed = ((_a = sizes[index]) != null ? _a : 0) <= 1;
516
- const isRightOrBottomCollapsed = ((_b = sizes[index + 1]) != null ? _b : 0) <= 1;
517
- const isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;
518
- return /* @__PURE__ */ jsxs2(React.Fragment, { children: [
519
- /* @__PURE__ */ jsx3(
520
- "div",
521
- {
522
- style: {
523
- background: index % 2 ? "#fff" : "#fafafa",
524
- boxSizing: "border-box",
525
- flex: `0 0 ${(_c = sizes[index]) != null ? _c : 0}px`,
526
- minHeight: 0,
527
- minWidth: 0,
528
- overflow: "auto",
529
- padding: isHidden ? 0 : 16,
530
- transition: draggingIndex === null ? "flex-basis 0.2s ease" : void 0,
531
- ...panel.props.style
532
- },
533
- children: !isHidden && panel.props.children
534
- }
535
- ),
536
- index < panels.length - 1 && /* @__PURE__ */ jsxs2(
537
- "div",
538
- {
539
- "aria-orientation": resolvedOrientation,
540
- onClick: () => {
541
- if (isRightOrBottomCollapsed) {
542
- toggleCollapse(index + 1, index);
543
- } else if (isLeftOrTopCollapsed) {
544
- toggleCollapse(index, index + 1);
450
+ return /* @__PURE__ */ jsx3("div", { className, ref: rootRef, style: rootStyle, children: panels.map((panel, index) => {
451
+ var _a, _b, _c;
452
+ const isHidden = sizes[index] <= 1;
453
+ const isLeftOrTopCollapsed = ((_a = sizes[index]) != null ? _a : 0) <= 1;
454
+ const isRightOrBottomCollapsed = ((_b = sizes[index + 1]) != null ? _b : 0) <= 1;
455
+ const isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;
456
+ return /* @__PURE__ */ jsxs2(React.Fragment, { children: [
457
+ /* @__PURE__ */ jsx3(
458
+ "div",
459
+ {
460
+ style: {
461
+ background: index % 2 ? "#fff" : "#fafafa",
462
+ boxSizing: "border-box",
463
+ flex: `0 0 ${(_c = sizes[index]) != null ? _c : 0}px`,
464
+ minHeight: 0,
465
+ minWidth: 0,
466
+ overflow: "auto",
467
+ padding: isHidden ? 0 : 16,
468
+ transition: draggingIndex === null ? "flex-basis 0.2s ease" : void 0,
469
+ ...panel.props.style
470
+ },
471
+ children: !isHidden && panel.props.children
472
+ }
473
+ ),
474
+ index < panels.length - 1 && /* @__PURE__ */ jsxs2(
475
+ "div",
476
+ {
477
+ "aria-orientation": resolvedOrientation,
478
+ onDoubleClick: resetSizes,
479
+ onKeyDown: (event) => {
480
+ const step = event.shiftKey ? 40 : 10;
481
+ const directionMap = resolvedOrientation === "horizontal" ? { ArrowLeft: -step, ArrowRight: step } : { ArrowUp: -step, ArrowDown: step };
482
+ const delta = directionMap[event.key];
483
+ if (delta !== void 0) {
484
+ event.preventDefault();
485
+ resizePair(index, delta);
486
+ }
487
+ },
488
+ onPointerDown: (event) => startResize(index, event),
489
+ onPointerEnter: () => setHoveredIndex(index),
490
+ onPointerLeave: () => setHoveredIndex(null),
491
+ role: "separator",
492
+ title: "\u62D6\u52A8\u8C03\u6574\u5927\u5C0F\uFF0C\u53CC\u51FB\u91CD\u7F6E",
493
+ style: {
494
+ alignItems: "center",
495
+ background: hoveredIndex === index || draggingIndex === index ? "#e6f4ff" : "#f5f5f5",
496
+ boxSizing: "border-box",
497
+ cursor: resolvedOrientation === "horizontal" ? "col-resize" : "row-resize",
498
+ display: "flex",
499
+ flex: `0 0 ${draggerSize}px`,
500
+ justifyContent: "center",
501
+ outline: "none",
502
+ position: "relative",
503
+ userSelect: "none",
504
+ zIndex: isAnyCollapsed ? 2 : 1
505
+ },
506
+ tabIndex: 0,
507
+ children: [
508
+ /* @__PURE__ */ jsx3(
509
+ "div",
510
+ {
511
+ style: {
512
+ background: hoveredIndex === index || draggingIndex === index || isAnyCollapsed ? "#1677ff" : "#d9d9d9",
513
+ borderRadius: 2,
514
+ height: resolvedOrientation === "horizontal" ? 48 : 2,
515
+ width: resolvedOrientation === "horizontal" ? 2 : 48
516
+ }
545
517
  }
546
- },
547
- onDoubleClick: resetSizes,
548
- onKeyDown: (event) => {
549
- const step = event.shiftKey ? 40 : 10;
550
- const directionMap = resolvedOrientation === "horizontal" ? { ArrowLeft: -step, ArrowRight: step } : { ArrowUp: -step, ArrowDown: step };
551
- const delta = directionMap[event.key];
552
- if (delta !== void 0) {
553
- event.preventDefault();
554
- resizePair(index, delta);
518
+ ),
519
+ !isAnyCollapsed && /* @__PURE__ */ jsxs2(
520
+ "div",
521
+ {
522
+ style: {
523
+ position: "absolute",
524
+ display: "flex",
525
+ flexDirection: resolvedOrientation === "horizontal" ? "column" : "row",
526
+ gap: 4,
527
+ opacity: hoveredIndex === index || draggingIndex === index ? 1 : 0,
528
+ pointerEvents: hoveredIndex === index || draggingIndex === index ? "auto" : "none",
529
+ transition: "opacity 0.15s ease",
530
+ zIndex: 5
531
+ },
532
+ children: [
533
+ renderCollapseButton(index, index, "start"),
534
+ renderCollapseButton(index, index + 1, "end")
535
+ ]
555
536
  }
556
- },
557
- onPointerDown: (event) => startResize(index, event),
558
- onPointerEnter: () => setHoveredIndex(index),
559
- onPointerLeave: () => setHoveredIndex(null),
560
- role: "separator",
561
- title: isAnyCollapsed ? "\u70B9\u51FB\u53EF\u5C55\u5F00\u6062\u590D\u9762\u677F" : "\u62D6\u52A8\u8C03\u6574\u5927\u5C0F\uFF0C\u53CC\u51FB\u91CD\u7F6E",
562
- style: {
563
- alignItems: "center",
564
- background: hoveredIndex === index || draggingIndex === index || isAnyCollapsed ? "#e6f4ff" : "#f5f5f5",
565
- boxSizing: "border-box",
566
- cursor: isAnyCollapsed ? "pointer" : resolvedOrientation === "horizontal" ? "col-resize" : "row-resize",
567
- display: "flex",
568
- flex: `0 0 ${DRAGGER_SIZE}px`,
569
- justifyContent: "center",
570
- outline: "none",
571
- position: "relative",
572
- userSelect: "none",
573
- zIndex: isAnyCollapsed ? 2 : 1
574
- },
575
- tabIndex: 0,
576
- children: [
577
- /* @__PURE__ */ jsx3(
578
- "div",
579
- {
580
- style: {
581
- background: hoveredIndex === index || draggingIndex === index || isAnyCollapsed ? "#1677ff" : "#d9d9d9",
582
- borderRadius: 2,
583
- height: resolvedOrientation === "horizontal" ? 48 : 2,
584
- width: resolvedOrientation === "horizontal" ? 2 : 48
585
- }
586
- }
587
- ),
588
- !isAnyCollapsed && /* @__PURE__ */ jsxs2(
589
- "div",
590
- {
591
- style: {
592
- position: "absolute",
593
- display: "flex",
594
- flexDirection: resolvedOrientation === "horizontal" ? "column" : "row",
595
- gap: 4,
596
- opacity: hoveredIndex === index ? 1 : 0.85,
597
- transition: "opacity 0.15s ease",
598
- pointerEvents: "auto",
599
- zIndex: 5
600
- },
601
- children: [
602
- renderCollapseButton(index, index, "start"),
603
- renderCollapseButton(index, index + 1, "end")
604
- ]
605
- }
606
- )
607
- ]
608
- }
609
- )
610
- ] }, index);
611
- }),
612
- panels.map((_, index) => renderCollapsedExpandHandle(index))
613
- ] });
537
+ ),
538
+ isAnyCollapsed && /* @__PURE__ */ jsx3(
539
+ "div",
540
+ {
541
+ style: {
542
+ position: "absolute",
543
+ display: "flex",
544
+ alignItems: "center",
545
+ justifyContent: "center",
546
+ opacity: hoveredIndex === index || draggingIndex === index ? 1 : 0,
547
+ pointerEvents: hoveredIndex === index || draggingIndex === index ? "auto" : "none",
548
+ transition: "opacity 0.15s ease",
549
+ zIndex: 5
550
+ },
551
+ children: (() => {
552
+ const ExpandIcon = resolvedOrientation === "horizontal" ? isLeftOrTopCollapsed ? RightOutlined : LeftOutlined : isLeftOrTopCollapsed ? DownOutlined : UpOutlined;
553
+ const targetIndex = isLeftOrTopCollapsed ? index : index + 1;
554
+ const neighborIndex = isLeftOrTopCollapsed ? index + 1 : index;
555
+ return /* @__PURE__ */ jsx3(
556
+ "button",
557
+ {
558
+ "aria-label": "\u5C55\u5F00\u9762\u677F",
559
+ title: "\u5C55\u5F00\u9762\u677F",
560
+ onClick: (event) => {
561
+ event.stopPropagation();
562
+ toggleCollapse(targetIndex, neighborIndex);
563
+ },
564
+ style: {
565
+ alignItems: "center",
566
+ background: "#fff",
567
+ border: "1px solid #1677ff",
568
+ borderRadius: 4,
569
+ color: "#1677ff",
570
+ cursor: "pointer",
571
+ display: "flex",
572
+ height: 20,
573
+ justifyContent: "center",
574
+ padding: 0,
575
+ width: 20,
576
+ fontSize: 12,
577
+ boxShadow: "0 2px 4px rgba(0,0,0,0.12)"
578
+ },
579
+ type: "button",
580
+ children: /* @__PURE__ */ jsx3(ExpandIcon, {})
581
+ }
582
+ );
583
+ })()
584
+ }
585
+ )
586
+ ]
587
+ }
588
+ )
589
+ ] }, index);
590
+ }) });
614
591
  };
615
592
  CustomSplitter.Panel = SplitterPanel;
616
593
  var Splitter_default = CustomSplitter;
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 SplitterPanelProps = {\n\tchildren?: ReactNode;\n\tcollapsible?: boolean;\n\tdefaultSize?: SplitterSize;\n\tmax?: SplitterSize;\n\tmin?: SplitterSize;\n\tresizable?: boolean;\n\tsize?: SplitterSize;\n\tstyle?: CSSProperties;\n};\n\nexport type SplitterProps = {\n\tchildren: ReactNode;\n\tclassName?: string;\n\tlazy?: boolean;\n\tonResize?: (sizes: number[]) => void;\n\tonResizeEnd?: (sizes: number[]) => void;\n\tonResizeStart?: (sizes: number[]) => void;\n\torientation?: SplitterOrientation;\n\tstyle?: CSSProperties;\n\tvertical?: boolean;\n};\n\ntype SplitterComponent = React.FC<SplitterProps> & {\n\tPanel: React.FC<SplitterPanelProps>;\n};\n\nconst DRAGGER_SIZE = 8;\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\tlazy = false,\n\tonResize,\n\tonResizeEnd,\n\tonResizeStart,\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 lastNonZeroSizesRef = 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 [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) * DRAGGER_SIZE);\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\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\tnormalized.forEach((size, index) => {\n\t\t\t\tif (size > 1) {\n\t\t\t\t\tlastNonZeroSizesRef.current[index] = size;\n\t\t\t\t}\n\t\t\t});\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\tlastNonZeroSizesRef.current = nextSizes.map((size) =>\n\t\t\t\tMath.max(size, trackSize / Math.max(panels.length, 1)),\n\t\t\t);\n\t\t\treturn nextSizes;\n\t\t});\n\t}, [buildInitialSizes, panels.length, trackSize]);\n\n\tconst getResizedPair = useCallback(\n\t\t(sourceSizes: number[], index: number, delta: number) => {\n\t\t\tconst nextSizes = [...sourceSizes];\n\t\t\tconst leftPanel = panels[index];\n\t\t\tconst rightPanel = panels[index + 1];\n\n\t\t\tconst leftMin = getPanelMin(index);\n\t\t\tconst rightMin = getPanelMin(index + 1);\n\t\t\tconst leftMax = getPanelMax(index);\n\t\t\tconst rightMax = getPanelMax(index + 1);\n\n\t\t\tlet targetLeft = sourceSizes[index] + delta;\n\t\t\tlet targetRight = sourceSizes[index + 1] - delta;\n\n\t\t\t// 如果面板可折叠且设置了 min > 0,当拖拽目标尺寸小于 min / 2 时可自动吸附折叠到 0\n\t\t\tif (leftPanel?.props.collapsible && leftMin > 0 && targetLeft < leftMin / 2) {\n\t\t\t\ttargetLeft = 0;\n\t\t\t\ttargetRight = sourceSizes[index] + sourceSizes[index + 1];\n\t\t\t} else if (rightPanel?.props.collapsible && rightMin > 0 && targetRight < rightMin / 2) {\n\t\t\t\ttargetRight = 0;\n\t\t\t\ttargetLeft = sourceSizes[index] + sourceSizes[index + 1];\n\t\t\t} else {\n\t\t\t\tconst minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);\n\t\t\t\tconst maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);\n\t\t\t\tconst safeDelta = clamp(delta, minDelta, maxDelta);\n\n\t\t\t\ttargetLeft = sourceSizes[index] + safeDelta;\n\t\t\t\ttargetRight = sourceSizes[index + 1] - safeDelta;\n\t\t\t}\n\n\t\t\tnextSizes[index] = targetLeft;\n\t\t\tnextSizes[index + 1] = targetRight;\n\t\t\treturn normalizeToTrack(nextSizes);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack, panels],\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\tonResizeEnd?.(roundSizes(sizesRef.current));\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\tlastNonZeroSizesRef.current[index] = nextSizes[index];\n\t\t\tnextSizes[neighborIndex] += nextSizes[index];\n\t\t\tnextSizes[index] = 0;\n\t\t} else {\n\t\t\tconst restoredSize =\n\t\t\t\tlastNonZeroSizesRef.current[index] ||\n\t\t\t\tparseSize(panels[index].props.defaultSize, trackSize, trackSize / panels.length);\n\t\t\tnextSizes[index] = clamp(restoredSize, getPanelMin(index), getPanelMax(index));\n\t\t\tnextSizes[neighborIndex] = Math.max(0, nextSizes[neighborIndex] - nextSizes[index]);\n\t\t}\n\n\t\tupdateSizes(nextSizes);\n\t\tonResizeEnd?.(roundSizes(sizesRef.current));\n\t};\n\n\tconst resetSizes = () => {\n\t\tconst nextSizes = buildInitialSizes();\n\t\tupdateSizes(nextSizes);\n\t\tonResizeEnd?.(roundSizes(nextSizes));\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\tif (!panel?.props.collapsible) {\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\treturn (\n\t\t\t<button\n\t\t\t\taria-label=\"折叠面板\"\n\t\t\t\ttitle=\"折叠面板\"\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: 4,\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: 20,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\twidth: 20,\n\t\t\t\t\tfontSize: 12,\n\t\t\t\t\tboxShadow: '0 2px 4px rgba(0,0,0,0.08)',\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\n\t\t\t>\n\t\t\t\t<Icon />\n\t\t\t</button>\n\t\t);\n\t};\n\n\t// 渲染处于折叠状态下的“展开”触发手柄(挂载在根容器内侧 8px 处,100% 常显、绝对不被裁剪)\n\tconst renderCollapsedExpandHandle = (panelIndex: number) => {\n\t\tconst panel = panels[panelIndex];\n\t\tif (!panel?.props.collapsible) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst isCollapsed = sizes.length > 0 && (sizes[panelIndex] ?? 0) <= 1;\n\t\tif (!isCollapsed) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst isFirstPanel = panelIndex === 0;\n\t\tconst neighborIndex = isFirstPanel ? panelIndex + 1 : panelIndex - 1;\n\n\t\tconst Icon =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? isFirstPanel\n\t\t\t\t\t? RightOutlined // 左面板折叠后,图标指向右 > (展开左面板)\n\t\t\t\t\t: LeftOutlined // 右面板折叠后,图标指向左 < (展开右面板)\n\t\t\t\t: isFirstPanel\n\t\t\t\t\t? DownOutlined\n\t\t\t\t\t: UpOutlined;\n\n\t\tconst label =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? isFirstPanel\n\t\t\t\t\t? '展开左侧面板'\n\t\t\t\t\t: '展开右侧面板'\n\t\t\t\t: isFirstPanel\n\t\t\t\t\t? '展开上方面板'\n\t\t\t\t\t: '展开下方面板';\n\n\t\tconst positionStyle: CSSProperties =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? isFirstPanel\n\t\t\t\t\t? { left: 8, top: '50%', transform: 'translateY(-50%)' }\n\t\t\t\t\t: { right: 8, top: '50%', transform: 'translateY(-50%)' }\n\t\t\t\t: isFirstPanel\n\t\t\t\t\t? { top: 8, left: '50%', transform: 'translateX(-50%)' }\n\t\t\t\t\t: { bottom: 8, left: '50%', transform: 'translateX(-50%)' };\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\taria-label={label}\n\t\t\t\tkey={`collapsed-handle-${panelIndex}`}\n\t\t\t\ttitle={label}\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\tposition: 'absolute',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\tborder: '1px solid #1677ff',\n\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\tcolor: '#1677ff',\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\theight: 24,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\twidth: 24,\n\t\t\t\t\tfontSize: 12,\n\t\t\t\t\tboxShadow: '0 2px 8px rgba(22, 119, 255, 0.35)',\n\t\t\t\t\tzIndex: 20,\n\t\t\t\t\t...positionStyle,\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\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: 'auto',\n\t\t\t\t\t\t\t\tpadding: isHidden ? 0 : 16,\n\t\t\t\t\t\t\t\ttransition: draggingIndex === null ? '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 && panel.props.children}\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\tonClick={() => {\n\t\t\t\t\t\t\t\t\tif (isRightOrBottomCollapsed) {\n\t\t\t\t\t\t\t\t\t\ttoggleCollapse(index + 1, index);\n\t\t\t\t\t\t\t\t\t} else if (isLeftOrTopCollapsed) {\n\t\t\t\t\t\t\t\t\t\ttoggleCollapse(index, index + 1);\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\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={isAnyCollapsed ? '点击可展开恢复面板' : '拖动调整大小,双击重置'}\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 || isAnyCollapsed\n\t\t\t\t\t\t\t\t\t\t\t? '#e6f4ff'\n\t\t\t\t\t\t\t\t\t\t\t: '#f5f5f5',\n\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\tcursor: isAnyCollapsed\n\t\t\t\t\t\t\t\t\t\t? 'pointer'\n\t\t\t\t\t\t\t\t\t\t: resolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? 'col-resize'\n\t\t\t\t\t\t\t\t\t\t\t: '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 ${DRAGGER_SIZE}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<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index || isAnyCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t? '#1677ff'\n\t\t\t\t\t\t\t\t\t\t\t\t: '#d9d9d9',\n\t\t\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\t\t\theight: resolvedOrientation === 'horizontal' ? 48 : 2,\n\t\t\t\t\t\t\t\t\t\twidth: resolvedOrientation === 'horizontal' ? 2 : 48,\n\t\t\t\t\t\t\t\t\t}}\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\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'column' : 'row',\n\t\t\t\t\t\t\t\t\t\t\tgap: 4,\n\t\t\t\t\t\t\t\t\t\t\topacity: hoveredIndex === index ? 1 : 0.85,\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'opacity 0.15s ease',\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}}\n\t\t\t\t\t\t\t\t\t>\n\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{renderCollapseButton(index, index + 1, 'end')}\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\n\t\t\t{/* 当有面板处于折叠状态时,在根容器内部边缘常显渲染展开手柄 */}\n\t\t\t{panels.map((_, index) => renderCollapsedExpandHandle(index))}\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 SplitterPanelProps = {\n\tchildren?: ReactNode;\n\tcollapsible?: boolean;\n\tdefaultSize?: SplitterSize;\n\tmax?: SplitterSize;\n\tmin?: SplitterSize;\n\tresizable?: boolean;\n\tsize?: SplitterSize;\n\tstyle?: CSSProperties;\n};\n\nexport type SplitterProps = {\n\tchildren: ReactNode;\n\tclassName?: string;\n\tdraggerSize?: number;\n\tlazy?: boolean;\n\tonResize?: (sizes: number[]) => void;\n\tonResizeEnd?: (sizes: number[]) => void;\n\tonResizeStart?: (sizes: number[]) => void;\n\torientation?: SplitterOrientation;\n\tstyle?: CSSProperties;\n\tvertical?: boolean;\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\tdraggerSize = DEFAULT_DRAGGER_SIZE,\n\tlazy = false,\n\tonResize,\n\tonResizeEnd,\n\tonResizeStart,\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 lastNonZeroSizesRef = 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 [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\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\tnormalized.forEach((size, index) => {\n\t\t\t\tif (size > 1) {\n\t\t\t\t\tlastNonZeroSizesRef.current[index] = size;\n\t\t\t\t}\n\t\t\t});\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\tlastNonZeroSizesRef.current = nextSizes.map((size) =>\n\t\t\t\tMath.max(size, trackSize / Math.max(panels.length, 1)),\n\t\t\t);\n\t\t\treturn nextSizes;\n\t\t});\n\t}, [buildInitialSizes, panels.length, trackSize]);\n\n\tconst getResizedPair = useCallback(\n\t\t(sourceSizes: number[], index: number, delta: number) => {\n\t\t\tconst nextSizes = [...sourceSizes];\n\t\t\tconst leftMin = getPanelMin(index);\n\t\t\tconst rightMin = 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\tonResizeEnd?.(roundSizes(sizesRef.current));\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\tlastNonZeroSizesRef.current[index] = nextSizes[index];\n\t\t\tnextSizes[neighborIndex] += nextSizes[index];\n\t\t\tnextSizes[index] = 0;\n\t\t} else {\n\t\t\tconst restoredSize =\n\t\t\t\tlastNonZeroSizesRef.current[index] ||\n\t\t\t\tparseSize(panels[index].props.defaultSize, trackSize, trackSize / panels.length);\n\t\t\tnextSizes[index] = clamp(restoredSize, getPanelMin(index), getPanelMax(index));\n\t\t\tnextSizes[neighborIndex] = Math.max(0, nextSizes[neighborIndex] - nextSizes[index]);\n\t\t}\n\n\t\tupdateSizes(nextSizes);\n\t\tonResizeEnd?.(roundSizes(sizesRef.current));\n\t};\n\n\tconst resetSizes = () => {\n\t\tconst nextSizes = buildInitialSizes();\n\t\tupdateSizes(nextSizes);\n\t\tonResizeEnd?.(roundSizes(nextSizes));\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\tif (!panel?.props.collapsible) {\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\treturn (\n\t\t\t<button\n\t\t\t\taria-label=\"折叠面板\"\n\t\t\t\ttitle=\"折叠面板\"\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: 4,\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: 20,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\twidth: 20,\n\t\t\t\t\tfontSize: 12,\n\t\t\t\t\tboxShadow: '0 2px 4px rgba(0,0,0,0.08)',\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\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: 'auto',\n\t\t\t\t\t\t\t\tpadding: isHidden ? 0 : 16,\n\t\t\t\t\t\t\t\ttransition: draggingIndex === null ? '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 && panel.props.children}\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\n\t\t\t\t\t\t\t\t\t\t\t? '#e6f4ff'\n\t\t\t\t\t\t\t\t\t\t\t: '#f5f5f5',\n\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\tcursor:\n\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? 'col-resize'\n\t\t\t\t\t\t\t\t\t\t\t: '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<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index || isAnyCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t? '#1677ff'\n\t\t\t\t\t\t\t\t\t\t\t\t: '#d9d9d9',\n\t\t\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\t\t\theight: resolvedOrientation === 'horizontal' ? 48 : 2,\n\t\t\t\t\t\t\t\t\t\twidth: resolvedOrientation === 'horizontal' ? 2 : 48,\n\t\t\t\t\t\t\t\t\t}}\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\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'column' : 'row',\n\t\t\t\t\t\t\t\t\t\t\tgap: 4,\n\t\t\t\t\t\t\t\t\t\t\topacity: hoveredIndex === index || draggingIndex === index ? 1 : 0,\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents:\n\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? 'auto' : 'none',\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'opacity 0.15s ease',\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{renderCollapseButton(index, index, 'start')}\n\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</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* 折叠状态下呈现展开按钮(默认隐藏,鼠标移动到拖拽区域时显示,且仅点击 icon 展开) */}\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\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: hoveredIndex === index || draggingIndex === index ? 1 : 0,\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents:\n\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? 'auto' : 'none',\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'opacity 0.15s ease',\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{(() => {\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 targetIndex = isLeftOrTopCollapsed ? index : index + 1;\n\t\t\t\t\t\t\t\t\t\t\tconst neighborIndex = isLeftOrTopCollapsed ? index + 1 : index;\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=\"展开面板\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"展开面板\"\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: '#fff',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: '1px solid #1677ff',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: '#1677ff',\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: 20,\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\twidth: 20,\n\t\t\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\t\t\tboxShadow: '0 2px 4px rgba(0,0,0,0.12)',\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>\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.2",
3
+ "version": "1.1.4",
4
4
  "description": "React 折叠容器(CollapseBox)与分屏面板(Splitter)组件,零 UI 库依赖",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",