react-resize-demo 2.0.2 → 3.0.0
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/CHANGELOG.md +130 -0
- package/README.md +119 -65
- package/dist/core/PanelManager.js +2 -0
- package/dist/core/PanelManager.js.map +1 -0
- package/dist/core/virtualNode.js +2 -0
- package/dist/core/virtualNode.js.map +1 -0
- package/dist/esm/core/PanelManager.js +2 -0
- package/dist/esm/core/PanelManager.js.map +1 -0
- package/dist/esm/core/virtualNode.js +2 -0
- package/dist/esm/core/virtualNode.js.map +1 -0
- package/dist/esm/index.d.ts +14 -3
- package/dist/esm/index.js +1 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/strategies/basic/components/ResizeHandle/index.d.ts +18 -0
- package/dist/esm/strategies/basic/components/ResizeHandle/index.js +2 -0
- package/dist/esm/strategies/basic/components/ResizeHandle/index.js.map +1 -0
- package/dist/{components → esm/strategies/basic/components}/ResizePanel/index.d.ts +2 -1
- package/dist/esm/strategies/basic/components/ResizePanel/index.js +2 -0
- package/dist/esm/strategies/basic/components/ResizePanel/index.js.map +1 -0
- package/dist/{components → esm/strategies/basic/components}/ResizePanelGroup/index.d.ts +3 -3
- package/dist/esm/strategies/basic/components/ResizePanelGroup/index.js +2 -0
- package/dist/esm/strategies/basic/components/ResizePanelGroup/index.js.map +1 -0
- package/dist/esm/strategies/basic/context.d.ts +28 -0
- package/dist/esm/strategies/basic/context.js +2 -0
- package/dist/esm/strategies/basic/context.js.map +1 -0
- package/dist/esm/strategies/basic/resizeAble.js +2 -0
- package/dist/esm/strategies/basic/resizeAble.js.map +1 -0
- package/dist/esm/strategies/flex/components/ResizeHandleFlex/index.d.ts +18 -0
- package/dist/esm/strategies/flex/components/ResizeHandleFlex/index.js +2 -0
- package/dist/esm/strategies/flex/components/ResizeHandleFlex/index.js.map +1 -0
- package/dist/esm/strategies/flex/components/ResizePanelGroupFlex/index.d.ts +21 -0
- package/dist/esm/strategies/flex/components/ResizePanelGroupFlex/index.js +2 -0
- package/dist/esm/strategies/flex/components/ResizePanelGroupFlex/index.js.map +1 -0
- package/dist/esm/strategies/flex/resizeAble.js +2 -0
- package/dist/esm/strategies/flex/resizeAble.js.map +1 -0
- package/dist/esm/strategies/flex-linked/components/ResizeHandleFlexLinked/index.d.ts +17 -0
- package/dist/esm/strategies/flex-linked/components/ResizeHandleFlexLinked/index.js +2 -0
- package/dist/esm/strategies/flex-linked/components/ResizeHandleFlexLinked/index.js.map +1 -0
- package/dist/esm/strategies/flex-linked/components/ResizePanelFlexLinked/index.d.ts +17 -0
- package/dist/esm/strategies/flex-linked/components/ResizePanelFlexLinked/index.js +2 -0
- package/dist/esm/strategies/flex-linked/components/ResizePanelFlexLinked/index.js.map +1 -0
- package/dist/esm/strategies/flex-linked/components/ResizePanelGroupFlexLinked/index.d.ts +20 -0
- package/dist/esm/strategies/flex-linked/components/ResizePanelGroupFlexLinked/index.js +2 -0
- package/dist/esm/strategies/flex-linked/components/ResizePanelGroupFlexLinked/index.js.map +1 -0
- package/dist/esm/strategies/flex-linked/context.js +2 -0
- package/dist/esm/strategies/flex-linked/context.js.map +1 -0
- package/dist/esm/strategies/flex-linked/resizeAble.js +2 -0
- package/dist/esm/strategies/flex-linked/resizeAble.js.map +1 -0
- package/dist/esm/strategies/linked/components/ResizeHandleLinked/index.d.ts +18 -0
- package/dist/esm/strategies/linked/components/ResizeHandleLinked/index.js +2 -0
- package/dist/esm/strategies/linked/components/ResizeHandleLinked/index.js.map +1 -0
- package/dist/esm/strategies/linked/components/ResizePanelGroupLinked/index.d.ts +19 -0
- package/dist/esm/strategies/linked/components/ResizePanelGroupLinked/index.js +2 -0
- package/dist/esm/strategies/linked/components/ResizePanelGroupLinked/index.js.map +1 -0
- package/dist/esm/strategies/linked/components/ResizePanelLinked/index.d.ts +17 -0
- package/dist/esm/strategies/linked/components/ResizePanelLinked/index.js +2 -0
- package/dist/esm/strategies/linked/components/ResizePanelLinked/index.js.map +1 -0
- package/dist/esm/strategies/linked/context.d.ts +29 -0
- package/dist/esm/strategies/linked/context.js +2 -0
- package/dist/esm/strategies/linked/context.js.map +1 -0
- package/dist/esm/strategies/linked/resizeAble.js +2 -0
- package/dist/esm/strategies/linked/resizeAble.js.map +1 -0
- package/dist/esm/types/index.d.ts +36 -2
- package/dist/index.d.ts +14 -3
- package/dist/index.js +1 -14
- package/dist/index.js.map +1 -1
- package/dist/strategies/basic/components/ResizeHandle/index.d.ts +18 -0
- package/dist/strategies/basic/components/ResizeHandle/index.js +2 -0
- package/dist/strategies/basic/components/ResizeHandle/index.js.map +1 -0
- package/dist/{esm → strategies/basic}/components/ResizePanel/index.d.ts +2 -1
- package/dist/strategies/basic/components/ResizePanel/index.js +2 -0
- package/dist/strategies/basic/components/ResizePanel/index.js.map +1 -0
- package/dist/{esm → strategies/basic}/components/ResizePanelGroup/index.d.ts +3 -3
- package/dist/strategies/basic/components/ResizePanelGroup/index.js +2 -0
- package/dist/strategies/basic/components/ResizePanelGroup/index.js.map +1 -0
- package/dist/strategies/basic/context.d.ts +28 -0
- package/dist/strategies/basic/context.js +2 -0
- package/dist/strategies/basic/context.js.map +1 -0
- package/dist/strategies/basic/resizeAble.js +2 -0
- package/dist/strategies/basic/resizeAble.js.map +1 -0
- package/dist/strategies/flex/components/ResizeHandleFlex/index.d.ts +18 -0
- package/dist/strategies/flex/components/ResizeHandleFlex/index.js +2 -0
- package/dist/strategies/flex/components/ResizeHandleFlex/index.js.map +1 -0
- package/dist/strategies/flex/components/ResizePanelGroupFlex/index.d.ts +21 -0
- package/dist/strategies/flex/components/ResizePanelGroupFlex/index.js +2 -0
- package/dist/strategies/flex/components/ResizePanelGroupFlex/index.js.map +1 -0
- package/dist/strategies/flex/resizeAble.js +2 -0
- package/dist/strategies/flex/resizeAble.js.map +1 -0
- package/dist/strategies/flex-linked/components/ResizeHandleFlexLinked/index.d.ts +17 -0
- package/dist/strategies/flex-linked/components/ResizeHandleFlexLinked/index.js +2 -0
- package/dist/strategies/flex-linked/components/ResizeHandleFlexLinked/index.js.map +1 -0
- package/dist/strategies/flex-linked/components/ResizePanelFlexLinked/index.d.ts +17 -0
- package/dist/strategies/flex-linked/components/ResizePanelFlexLinked/index.js +2 -0
- package/dist/strategies/flex-linked/components/ResizePanelFlexLinked/index.js.map +1 -0
- package/dist/strategies/flex-linked/components/ResizePanelGroupFlexLinked/index.d.ts +20 -0
- package/dist/strategies/flex-linked/components/ResizePanelGroupFlexLinked/index.js +2 -0
- package/dist/strategies/flex-linked/components/ResizePanelGroupFlexLinked/index.js.map +1 -0
- package/dist/strategies/flex-linked/context.js +2 -0
- package/dist/strategies/flex-linked/context.js.map +1 -0
- package/dist/strategies/flex-linked/resizeAble.js +2 -0
- package/dist/strategies/flex-linked/resizeAble.js.map +1 -0
- package/dist/strategies/linked/components/ResizeHandleLinked/index.d.ts +18 -0
- package/dist/strategies/linked/components/ResizeHandleLinked/index.js +2 -0
- package/dist/strategies/linked/components/ResizeHandleLinked/index.js.map +1 -0
- package/dist/strategies/linked/components/ResizePanelGroupLinked/index.d.ts +19 -0
- package/dist/strategies/linked/components/ResizePanelGroupLinked/index.js +2 -0
- package/dist/strategies/linked/components/ResizePanelGroupLinked/index.js.map +1 -0
- package/dist/strategies/linked/components/ResizePanelLinked/index.d.ts +17 -0
- package/dist/strategies/linked/components/ResizePanelLinked/index.js +2 -0
- package/dist/strategies/linked/components/ResizePanelLinked/index.js.map +1 -0
- package/dist/strategies/linked/context.d.ts +29 -0
- package/dist/strategies/linked/context.js +2 -0
- package/dist/strategies/linked/context.js.map +1 -0
- package/dist/strategies/linked/resizeAble.js +2 -0
- package/dist/strategies/linked/resizeAble.js.map +1 -0
- package/dist/types/index.d.ts +36 -2
- package/package.json +165 -134
- package/dist/components/ResizeHandle/index.js +0 -92
- package/dist/components/ResizeHandle/index.js.map +0 -1
- package/dist/components/ResizePanel/index.js +0 -33
- package/dist/components/ResizePanel/index.js.map +0 -1
- package/dist/components/ResizePanelGroup/index.js +0 -61
- package/dist/components/ResizePanelGroup/index.js.map +0 -1
- package/dist/components/shared/context.js +0 -35
- package/dist/components/shared/context.js.map +0 -1
- package/dist/esm/components/ResizeHandle/index.js +0 -90
- package/dist/esm/components/ResizeHandle/index.js.map +0 -1
- package/dist/esm/components/ResizePanel/index.js +0 -31
- package/dist/esm/components/ResizePanel/index.js.map +0 -1
- package/dist/esm/components/ResizePanelGroup/index.js +0 -59
- package/dist/esm/components/ResizePanelGroup/index.js.map +0 -1
- package/dist/esm/components/shared/context.js +0 -32
- package/dist/esm/components/shared/context.js.map +0 -1
- package/dist/esm/utils/resizeAble.js +0 -427
- package/dist/esm/utils/resizeAble.js.map +0 -1
- package/dist/esm/utils/virtualNode.js +0 -164
- package/dist/esm/utils/virtualNode.js.map +0 -1
- package/dist/utils/resizeAble.js +0 -431
- package/dist/utils/resizeAble.js.map +0 -1
- package/dist/utils/virtualNode.js +0 -168
- package/dist/utils/virtualNode.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,136 @@
|
|
|
5
5
|
格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
|
|
6
6
|
版本号遵循 [Semantic Versioning](https://semver.org/lang/zh-CN/)。
|
|
7
7
|
|
|
8
|
+
## [3.0.0] - 2026-01-10
|
|
9
|
+
|
|
10
|
+
### 🎉 重大版本更新
|
|
11
|
+
|
|
12
|
+
这是一个重大版本更新,引入了策略分类架构、性能优化和完整的文档体系。
|
|
13
|
+
|
|
14
|
+
### ✨ 新增
|
|
15
|
+
|
|
16
|
+
- **策略分类架构**
|
|
17
|
+
- 重构为按策略分类的目录结构(`src/strategies/`)
|
|
18
|
+
- 提供 4 种 resize 策略:
|
|
19
|
+
- **Basic 策略**:适合面板数量 < 10 的简单场景
|
|
20
|
+
- **Linked 策略**:适合面板数量 ≥ 10 的场景
|
|
21
|
+
- **Flex 策略**:适合需要精确控制占比的场景
|
|
22
|
+
- **Flex-Linked 策略**:适合大量面板 + 精确控制的场景(**推荐**)
|
|
23
|
+
|
|
24
|
+
- **性能优化**
|
|
25
|
+
- **节流优化**:使用 `requestAnimationFrame` 节流,减少 DOM 操作 50-70%
|
|
26
|
+
- **面板变化通知**:通过 `onPanelsChange` 回调,只重新渲染变化的面板
|
|
27
|
+
- **自动冻结**:自动冻结未变化面板,减少布局计算 85%
|
|
28
|
+
- **链表优化**:大量面板场景下性能提升 42.9%
|
|
29
|
+
|
|
30
|
+
- **核心工具模块化**
|
|
31
|
+
- 新增 `src/core/` 目录,存放所有策略共享的核心工具
|
|
32
|
+
- `PanelManager.ts`:面板管理器(链表策略使用)
|
|
33
|
+
- `virtualNode.ts`:虚拟节点管理
|
|
34
|
+
- `throttle.ts`:节流工具
|
|
35
|
+
|
|
36
|
+
- **完整文档体系**
|
|
37
|
+
- [策略对比文档](./docs/STRATEGY_COMPARISON.md):详细对比 4 种策略
|
|
38
|
+
- [性能优化时间线](./docs/PERFORMANCE_TIMELINE.md):记录所有性能优化措施
|
|
39
|
+
- [节流优化文档](./docs/THROTTLE_OPTIMIZATION.md):节流优化详细说明
|
|
40
|
+
- [面板变化通知文档](./docs/PANEL_CHANGE_NOTIFICATION.md):面板变化通知机制
|
|
41
|
+
|
|
42
|
+
### 🔄 变更
|
|
43
|
+
|
|
44
|
+
- **项目结构重构**
|
|
45
|
+
- 从单一组件结构重构为按策略分类的结构
|
|
46
|
+
- `src/components/` → `src/strategies/{strategy}/components/`
|
|
47
|
+
- `src/utils/` → `src/core/`(核心工具)+ `src/strategies/{strategy}/`(策略特定)
|
|
48
|
+
|
|
49
|
+
- **构建产物结构**
|
|
50
|
+
```
|
|
51
|
+
dist/
|
|
52
|
+
├── index.js # CJS 主入口
|
|
53
|
+
├── strategies/ # 策略目录
|
|
54
|
+
│ ├── basic/
|
|
55
|
+
│ ├── linked/
|
|
56
|
+
│ ├── flex/
|
|
57
|
+
│ └── flex-linked/
|
|
58
|
+
├── core/ # 核心工具
|
|
59
|
+
│ ├── PanelManager.js
|
|
60
|
+
│ ├── virtualNode.js
|
|
61
|
+
│ └── throttle.js
|
|
62
|
+
└── esm/ # ESM 模块
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- **移除废弃策略**
|
|
66
|
+
- 移除了 `ResizeAbleCoreOptimized` 和相关的 `Optimized` 组件
|
|
67
|
+
- 统一使用 `Flex-Linked` 策略作为最终版本
|
|
68
|
+
|
|
69
|
+
- **构建优化**
|
|
70
|
+
- 构建前自动清空 `dist` 目录
|
|
71
|
+
- 更新 `package.json` 的 `exports` 字段,支持策略和核心工具的导出路径
|
|
72
|
+
|
|
73
|
+
### 🔧 改进
|
|
74
|
+
|
|
75
|
+
- **性能提升**
|
|
76
|
+
- FPS 从 30-40 提升到 50-55(+66.7%)
|
|
77
|
+
- CPU 占用从 80-100% 降低到 40-60%(-50%)
|
|
78
|
+
- DOM 操作减少 60-70%
|
|
79
|
+
- React 渲染优化 85%
|
|
80
|
+
|
|
81
|
+
- **代码质量**
|
|
82
|
+
- 修复了最小尺寸限制的 bug(Flex-Linked 策略)
|
|
83
|
+
- 优化了面板变化检测逻辑
|
|
84
|
+
- 改进了链表遍历性能
|
|
85
|
+
|
|
86
|
+
- **开发体验**
|
|
87
|
+
- 更清晰的策略分类,便于维护和扩展
|
|
88
|
+
- 完整的文档体系,便于理解和使用
|
|
89
|
+
- 详细的性能对比和优化建议
|
|
90
|
+
|
|
91
|
+
### 📝 向后兼容
|
|
92
|
+
|
|
93
|
+
- 保留了 Basic 策略的组件导出(`ResizePanelGroup`、`ResizePanel`、`ResizeHandle`)
|
|
94
|
+
- 保留了旧的导出名称(`ResizablePanelGroup`、`ResizeablePanelGroup` 等)
|
|
95
|
+
- 主入口导入方式保持不变
|
|
96
|
+
|
|
97
|
+
### 🚨 破坏性变更
|
|
98
|
+
|
|
99
|
+
- 如果直接导入子模块路径,需要更新导入路径
|
|
100
|
+
- `Optimized` 相关组件已移除,请使用 `Flex-Linked` 策略替代
|
|
101
|
+
- 内部 API 结构发生变化,但公共 API 保持兼容
|
|
102
|
+
|
|
103
|
+
### 📚 文档
|
|
104
|
+
|
|
105
|
+
- 新增策略对比文档,帮助选择最适合的策略
|
|
106
|
+
- 新增性能优化时间线,记录所有优化措施
|
|
107
|
+
- 更新所有文档以反映新的目录结构
|
|
108
|
+
- 更新 README,添加策略说明和性能优化介绍
|
|
109
|
+
|
|
110
|
+
## [2.0.3] - 2026-01-10
|
|
111
|
+
|
|
112
|
+
### 🚀 性能优化
|
|
113
|
+
|
|
114
|
+
- **代码压缩**
|
|
115
|
+
- 集成 `@rollup/plugin-terser` 进行代码压缩
|
|
116
|
+
- 自动移除 debugger 语句和注释
|
|
117
|
+
- 变量名压缩,减小打包体积
|
|
118
|
+
- 保留 source map 支持调试
|
|
119
|
+
|
|
120
|
+
- **Tree-shaking 增强**
|
|
121
|
+
- 配置更激进的 tree-shaking 策略
|
|
122
|
+
- 使用 `smallest` 预设优化未使用代码移除
|
|
123
|
+
- 优化代码生成,使用 const 绑定提升 tree-shaking 效果
|
|
124
|
+
- 确保按需导入时只打包实际使用的代码
|
|
125
|
+
|
|
126
|
+
### 📦 构建优化
|
|
127
|
+
|
|
128
|
+
- **打包配置优化**
|
|
129
|
+
- 参考 Ant Design 的打包实践优化配置
|
|
130
|
+
- 确保所有模块都正确支持 tree-shaking
|
|
131
|
+
- 优化构建产物结构
|
|
132
|
+
|
|
133
|
+
### 📚 文档
|
|
134
|
+
|
|
135
|
+
- 新增 `OPTIMIZATION.md` 文档,详细记录性能优化项
|
|
136
|
+
- 更新项目结构规范文档
|
|
137
|
+
|
|
8
138
|
## [2.0.0] - 2026-01-10
|
|
9
139
|
|
|
10
140
|
### 🎉 重大版本更新
|
package/README.md
CHANGED
|
@@ -6,14 +6,17 @@
|
|
|
6
6
|
|
|
7
7
|
## ✨ 特性
|
|
8
8
|
|
|
9
|
+
- ✅ **多种策略**:提供 4 种 resize 策略(Basic、Linked、Flex、Flex-Linked),适应不同场景
|
|
9
10
|
- ✅ **双向布局**:支持水平和垂直方向的布局
|
|
10
11
|
- ✅ **拖拽调整**:可拖拽调整相邻面板的宽度/高度
|
|
11
12
|
- ✅ **最小尺寸**:支持设置面板最小尺寸限制
|
|
12
13
|
- ✅ **级联调整**:当面板达到最小值时,自动从相邻面板获取空间
|
|
13
14
|
- ✅ **虚拟化拖拽**:支持虚拟节点模式,拖拽时创建虚拟框架,提升性能
|
|
15
|
+
- ✅ **性能优化**:节流优化、面板变化通知、自动冻结等多项性能优化
|
|
14
16
|
- ✅ **TypeScript**:完整的 TypeScript 类型支持
|
|
15
|
-
- ✅
|
|
17
|
+
- ✅ **模块化架构**:按策略分类的清晰目录结构,支持按需导入
|
|
16
18
|
- ✅ **Tree-shaking**:支持 Tree-shaking,减少打包体积
|
|
19
|
+
- ✅ **代码压缩**:自动压缩代码,优化打包体积
|
|
17
20
|
|
|
18
21
|
## 📦 安装
|
|
19
22
|
|
|
@@ -27,44 +30,55 @@ pnpm add react-resize-demo
|
|
|
27
30
|
|
|
28
31
|
## 🚀 快速开始
|
|
29
32
|
|
|
30
|
-
###
|
|
33
|
+
### 基础用法(推荐使用 Flex-Linked 策略)
|
|
31
34
|
|
|
32
35
|
```tsx
|
|
33
|
-
import {
|
|
36
|
+
import { ResizePanelGroupFlexLinked, ResizePanelFlexLinked } from 'react-resize-demo';
|
|
34
37
|
|
|
35
38
|
function App() {
|
|
36
39
|
return (
|
|
37
40
|
<div style={{ width: '100%', height: '500px' }}>
|
|
38
|
-
<
|
|
39
|
-
<
|
|
41
|
+
<ResizePanelGroupFlexLinked direction="horizontal">
|
|
42
|
+
<ResizePanelFlexLinked minSize={100}>
|
|
40
43
|
<div>Panel 1</div>
|
|
41
|
-
</
|
|
42
|
-
<
|
|
44
|
+
</ResizePanelFlexLinked>
|
|
45
|
+
<ResizePanelFlexLinked minSize={200}>
|
|
43
46
|
<div>Panel 2</div>
|
|
44
|
-
</
|
|
45
|
-
<
|
|
47
|
+
</ResizePanelFlexLinked>
|
|
48
|
+
<ResizePanelFlexLinked minSize={300}>
|
|
46
49
|
<div>Panel 3</div>
|
|
47
|
-
</
|
|
48
|
-
</
|
|
50
|
+
</ResizePanelFlexLinked>
|
|
51
|
+
</ResizePanelGroupFlexLinked>
|
|
49
52
|
</div>
|
|
50
53
|
);
|
|
51
54
|
}
|
|
52
55
|
```
|
|
53
56
|
|
|
57
|
+
### 其他策略
|
|
58
|
+
|
|
59
|
+
项目提供 4 种策略,可根据场景选择:
|
|
60
|
+
|
|
61
|
+
- **Basic 策略**:适合面板数量 < 10 的简单场景
|
|
62
|
+
- **Linked 策略**:适合面板数量 ≥ 10 的场景
|
|
63
|
+
- **Flex 策略**:适合需要精确控制占比的场景
|
|
64
|
+
- **Flex-Linked 策略**:适合大量面板 + 精确控制的场景(**推荐**)
|
|
65
|
+
|
|
66
|
+
详细对比请查看 [策略对比文档](./docs/STRATEGY_COMPARISON.md)
|
|
67
|
+
|
|
54
68
|
### 垂直布局
|
|
55
69
|
|
|
56
70
|
```tsx
|
|
57
|
-
<
|
|
58
|
-
<
|
|
71
|
+
<ResizePanelGroupFlexLinked direction="vertical" style={{ height: '500px' }}>
|
|
72
|
+
<ResizePanelFlexLinked minSize={100}>
|
|
59
73
|
<div>顶部面板</div>
|
|
60
|
-
</
|
|
61
|
-
<
|
|
74
|
+
</ResizePanelFlexLinked>
|
|
75
|
+
<ResizePanelFlexLinked minSize={200}>
|
|
62
76
|
<div>中间面板</div>
|
|
63
|
-
</
|
|
64
|
-
<
|
|
77
|
+
</ResizePanelFlexLinked>
|
|
78
|
+
<ResizePanelFlexLinked minSize={100}>
|
|
65
79
|
<div>底部面板</div>
|
|
66
|
-
</
|
|
67
|
-
</
|
|
80
|
+
</ResizePanelFlexLinked>
|
|
81
|
+
</ResizePanelGroupFlexLinked>
|
|
68
82
|
```
|
|
69
83
|
|
|
70
84
|
### 虚拟化模式
|
|
@@ -73,17 +87,17 @@ function App() {
|
|
|
73
87
|
|
|
74
88
|
```tsx
|
|
75
89
|
// 启用虚拟化(使用默认样式)
|
|
76
|
-
<
|
|
77
|
-
<
|
|
90
|
+
<ResizePanelGroupFlexLinked virtual={true}>
|
|
91
|
+
<ResizePanelFlexLinked minSize={100}>
|
|
78
92
|
<div>Panel 1</div>
|
|
79
|
-
</
|
|
80
|
-
<
|
|
93
|
+
</ResizePanelFlexLinked>
|
|
94
|
+
<ResizePanelFlexLinked minSize={200}>
|
|
81
95
|
<div>Panel 2</div>
|
|
82
|
-
</
|
|
83
|
-
</
|
|
96
|
+
</ResizePanelFlexLinked>
|
|
97
|
+
</ResizePanelGroupFlexLinked>
|
|
84
98
|
|
|
85
|
-
//
|
|
86
|
-
<
|
|
99
|
+
// 启用虚拟化 + 面板变化通知(推荐)
|
|
100
|
+
<ResizePanelGroupFlexLinked
|
|
87
101
|
virtual={true}
|
|
88
102
|
virtualConfig={{
|
|
89
103
|
style: {
|
|
@@ -93,14 +107,18 @@ function App() {
|
|
|
93
107
|
},
|
|
94
108
|
className: 'custom-virtual-node'
|
|
95
109
|
}}
|
|
110
|
+
onPanelsChange={(changedIndices) => {
|
|
111
|
+
console.log('变化的面板:', Array.from(changedIndices));
|
|
112
|
+
// 只重新渲染变化的面板,提升性能
|
|
113
|
+
}}
|
|
96
114
|
>
|
|
97
|
-
<
|
|
115
|
+
<ResizePanelFlexLinked minSize={100}>
|
|
98
116
|
<div>Panel 1</div>
|
|
99
|
-
</
|
|
100
|
-
<
|
|
117
|
+
</ResizePanelFlexLinked>
|
|
118
|
+
<ResizePanelFlexLinked minSize={200}>
|
|
101
119
|
<div>Panel 2</div>
|
|
102
|
-
</
|
|
103
|
-
</
|
|
120
|
+
</ResizePanelFlexLinked>
|
|
121
|
+
</ResizePanelGroupFlexLinked>
|
|
104
122
|
```
|
|
105
123
|
|
|
106
124
|
### 按需导入
|
|
@@ -109,14 +127,17 @@ function App() {
|
|
|
109
127
|
|
|
110
128
|
```tsx
|
|
111
129
|
// 从主入口导入(推荐)
|
|
112
|
-
import {
|
|
130
|
+
import { ResizePanelGroupFlexLinked, ResizePanelFlexLinked } from 'react-resize-demo';
|
|
113
131
|
|
|
114
132
|
// 按需导入组件
|
|
115
|
-
import {
|
|
116
|
-
import {
|
|
133
|
+
import { ResizePanelGroupFlexLinked } from 'react-resize-demo/components';
|
|
134
|
+
import { ResizePanelFlexLinked } from 'react-resize-demo/components';
|
|
135
|
+
|
|
136
|
+
// 策略特定导入(高级用法)
|
|
137
|
+
import { ResizePanelGroupFlexLinked } from 'react-resize-demo/strategies/flex-linked/components/ResizePanelGroupFlexLinked';
|
|
117
138
|
|
|
118
|
-
//
|
|
119
|
-
import {
|
|
139
|
+
// 导入核心工具
|
|
140
|
+
import { PanelManager } from 'react-resize-demo/core/PanelManager';
|
|
120
141
|
|
|
121
142
|
// 导入类型
|
|
122
143
|
import type { VirtualConfig, ResizeDirection } from 'react-resize-demo/types';
|
|
@@ -213,36 +234,43 @@ const {
|
|
|
213
234
|
```
|
|
214
235
|
react-resize-demo/
|
|
215
236
|
├── src/ # 源代码目录
|
|
216
|
-
│ ├──
|
|
217
|
-
│ │ ├──
|
|
218
|
-
│ │ │
|
|
219
|
-
│ │ ├──
|
|
220
|
-
│ │ │ └──
|
|
221
|
-
│ │ ├──
|
|
222
|
-
│ │
|
|
223
|
-
│ │
|
|
224
|
-
│
|
|
225
|
-
│ │
|
|
226
|
-
│ ├──
|
|
227
|
-
│ │
|
|
228
|
-
│
|
|
229
|
-
│ │ └── index.
|
|
237
|
+
│ ├── strategies/ # 策略目录(按策略分类)
|
|
238
|
+
│ │ ├── basic/ # Basic 策略
|
|
239
|
+
│ │ │ ├── components/
|
|
240
|
+
│ │ │ ├── context.tsx
|
|
241
|
+
│ │ │ └── resizeAble.ts
|
|
242
|
+
│ │ ├── linked/ # Linked 策略
|
|
243
|
+
│ │ ├── flex/ # Flex 策略
|
|
244
|
+
│ │ └── flex-linked/ # Flex-Linked 策略(推荐)
|
|
245
|
+
│ ├── core/ # 核心工具(所有策略共享)
|
|
246
|
+
│ │ ├── PanelManager.ts
|
|
247
|
+
│ │ ├── virtualNode.ts
|
|
248
|
+
│ │ └── throttle.ts
|
|
249
|
+
│ ├── components/ # 组件统一导出
|
|
250
|
+
│ │ └── index.tsx
|
|
230
251
|
│ ├── types/ # 类型定义
|
|
231
|
-
│ │ └── index.ts
|
|
252
|
+
│ │ └── index.ts
|
|
232
253
|
│ └── index.ts # 主入口文件
|
|
233
254
|
├── demo/ # 本地测试Demo
|
|
234
|
-
│ ├──
|
|
255
|
+
│ ├── StrategyComparison.tsx # 策略对比演示
|
|
235
256
|
│ └── ...
|
|
257
|
+
├── docs/ # 文档目录
|
|
258
|
+
│ ├── STRATEGY_COMPARISON.md # 策略对比文档
|
|
259
|
+
│ ├── PERFORMANCE_TIMELINE.md # 性能优化时间线
|
|
260
|
+
│ ├── THROTTLE_OPTIMIZATION.md # 节流优化文档
|
|
261
|
+
│ └── PANEL_CHANGE_NOTIFICATION.md # 面板变化通知文档
|
|
236
262
|
├── dist/ # 构建输出目录
|
|
237
263
|
│ ├── index.js # CJS 主入口
|
|
238
264
|
│ ├── esm/ # ESM 模块
|
|
239
|
-
│ ├──
|
|
240
|
-
│ ├──
|
|
265
|
+
│ ├── strategies/ # 策略目录
|
|
266
|
+
│ ├── core/ # 核心工具
|
|
241
267
|
│ └── types/ # 类型定义
|
|
242
268
|
├── rollup.config.mjs # Rollup构建配置
|
|
243
269
|
└── package.json # 项目配置
|
|
244
270
|
```
|
|
245
271
|
|
|
272
|
+
详细的项目结构说明请查看 [PROJECT_STRUCTURE.md](./PROJECT_STRUCTURE.md)
|
|
273
|
+
|
|
246
274
|
## 🔧 开发
|
|
247
275
|
|
|
248
276
|
### 安装依赖
|
|
@@ -313,32 +341,58 @@ npm run build:watch
|
|
|
313
341
|
|
|
314
342
|
## 🔄 迁移指南
|
|
315
343
|
|
|
316
|
-
### 从
|
|
344
|
+
### 从 2.x 升级到 3.0
|
|
317
345
|
|
|
318
|
-
|
|
346
|
+
3.0 版本引入了策略分类架构,推荐使用 Flex-Linked 策略:
|
|
319
347
|
|
|
320
348
|
```tsx
|
|
321
|
-
//
|
|
322
|
-
import {
|
|
349
|
+
// 2.x 版本(仍然可用,向后兼容)
|
|
350
|
+
import { ResizePanelGroup, ResizePanel } from 'react-resize-demo';
|
|
323
351
|
|
|
324
|
-
//
|
|
325
|
-
import {
|
|
352
|
+
// 3.0 版本(推荐)
|
|
353
|
+
import { ResizePanelGroupFlexLinked, ResizePanelFlexLinked } from 'react-resize-demo';
|
|
326
354
|
```
|
|
327
355
|
|
|
328
356
|
### 新功能
|
|
329
357
|
|
|
330
|
-
|
|
358
|
+
3.0 版本新增了多种策略和性能优化:
|
|
331
359
|
|
|
332
360
|
```tsx
|
|
333
|
-
//
|
|
334
|
-
import {
|
|
335
|
-
|
|
361
|
+
// 使用 Flex-Linked 策略(推荐,性能最佳)
|
|
362
|
+
import { ResizePanelGroupFlexLinked, ResizePanelFlexLinked } from 'react-resize-demo';
|
|
363
|
+
|
|
364
|
+
// 启用面板变化通知(性能优化)
|
|
365
|
+
<ResizePanelGroupFlexLinked
|
|
366
|
+
onPanelsChange={(changedIndices) => {
|
|
367
|
+
// 只重新渲染变化的面板
|
|
368
|
+
}}
|
|
369
|
+
>
|
|
370
|
+
{/* ... */}
|
|
371
|
+
</ResizePanelGroupFlexLinked>
|
|
336
372
|
```
|
|
337
373
|
|
|
374
|
+
详细迁移指南请查看 [策略对比文档](./docs/STRATEGY_COMPARISON.md)
|
|
375
|
+
|
|
338
376
|
## 📝 版本历史
|
|
339
377
|
|
|
340
378
|
查看 [CHANGELOG.md](./CHANGELOG.md) 了解详细的版本变更历史。
|
|
341
379
|
|
|
380
|
+
## ⚡ 性能优化
|
|
381
|
+
|
|
382
|
+
项目经过多轮性能优化,从初始版本的 30-40 FPS 提升到当前的 50-55 FPS:
|
|
383
|
+
|
|
384
|
+
- **节流优化**:使用 `requestAnimationFrame` 节流,减少 DOM 操作 50-70%
|
|
385
|
+
- **虚拟化拖拽**:拖拽过程中不操作真实 DOM,减少重排和重绘
|
|
386
|
+
- **面板变化通知**:只重新渲染变化的面板,减少 React 渲染 70%
|
|
387
|
+
- **自动冻结**:自动冻结未变化面板,减少布局计算 85%
|
|
388
|
+
- **链表优化**:大量面板场景下性能提升 42.9%
|
|
389
|
+
|
|
390
|
+
详细优化时间线和性能对比请查看:
|
|
391
|
+
- [性能优化时间线](./docs/PERFORMANCE_TIMELINE.md)
|
|
392
|
+
- [构建优化文档](./OPTIMIZATION.md)
|
|
393
|
+
- [节流优化文档](./docs/THROTTLE_OPTIMIZATION.md)
|
|
394
|
+
- [面板变化通知文档](./docs/PANEL_CHANGE_NOTIFICATION.md)
|
|
395
|
+
|
|
342
396
|
## 📄 License
|
|
343
397
|
|
|
344
398
|
MIT
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";exports.PanelManager=class{constructor(){Object.defineProperty(this,"indexMap",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"elementMap",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"head",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"tail",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"nextIndex",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"freeIndices",{enumerable:!0,configurable:!0,writable:!0,value:[]})}register(e,t){const n=this.elementMap.get(e);if(n)return n.info={panelEl:e,minSize:t},n.index;let i;this.freeIndices.length>0?(this.freeIndices.sort((e,t)=>e-t),i=this.freeIndices[0]<this.nextIndex?this.freeIndices.shift():this.nextIndex++):i=this.nextIndex++;const l={index:i,info:{panelEl:e,minSize:t},prev:this.tail,next:null};return this.tail?this.tail.next=l:this.head=l,this.tail=l,this.indexMap.set(i,l),this.elementMap.set(e,l),i}unregister(e){const t=this.elementMap.get(e);t&&(t.prev?t.prev.next=t.next:this.head=t.next,t.next?t.next.prev=t.prev:this.tail=t.prev,this.freeIndices.push(t.index),this.indexMap.delete(t.index),this.elementMap.delete(e))}getByIndex(e){return this.indexMap.get(e)?.info||null}getIndex(e){return this.elementMap.get(e)?.index||-1}getPrev(e){return e.prev||null}getNext(e){return e.next||null}getHead(){return this.head||null}getTail(){return this.tail||null}getNodeByElement(e){return this.elementMap.get(e)||null}getNodeByIndex(e){return this.indexMap.get(e)||null}getAllPanels(){const e=[];let t=this.head;for(;t;)e.push(t.info),t=t.next;return e}getAllPanelElements(){const e=[];let t=this.head;for(;t;)e.push(t.info.panelEl),t=t.next;return e}getCount(){return this.indexMap.size}clear(){this.indexMap.clear(),this.elementMap.clear(),this.head=null,this.tail=null,this.nextIndex=0,this.freeIndices=[]}forEach(e){let t=this.head,n=0;for(;t;)e(t,n),t=t.next,n++}};
|
|
2
|
+
//# sourceMappingURL=PanelManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelManager.js","sources":["../../src/core/PanelManager.ts"],"sourcesContent":[null],"names":["constructor","Object","defineProperty","this","value","Map","register","panelEl","minSize","existingNode","elementMap","get","info","index","freeIndices","length","sort","a","b","nextIndex","shift","node","prev","tail","next","head","indexMap","set","unregister","push","delete","getByIndex","getIndex","getPrev","getNext","getHead","getTail","getNodeByElement","getNodeByIndex","getAllPanels","panels","current","getAllPanelElements","elements","getCount","size","clear","forEach","callback"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=class{constructor(){Object.defineProperty(this,"virtualNodes",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}createVirtualNode(t,e={},i="horizontal"){if(!t||!t.parentElement)return null;this.virtualNodes.has(t)&&this.removeVirtualNode(t);const a=window.getComputedStyle(t),o=t.style.flex||a.flex||"1",l=t.getBoundingClientRect(),s=t.parentElement.getBoundingClientRect(),n=l.top-s.top+(t.parentElement.scrollTop||0),r=l.left-s.left+(t.parentElement.scrollLeft||0),d=t.cloneNode(!1);d.style.cssText=`\n flex: ${o};\n margin: ${a.margin};\n padding: ${a.padding};\n border: ${a.border};\n box-sizing: ${a.boxSizing};\n pointer-events: none;\n z-index: 10000;\n opacity: 0.8;\n background-color: ${a.backgroundColor||"rgba(0, 123, 255, 0.1)"};\n overflow: hidden;\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.3);\n min-width: ${a.minWidth};\n min-height: ${a.minHeight};\n width: ${a.width};\n height: ${a.height};\n `,e.style&&Object.assign(d.style,e.style),e.className&&(d.className=e.className);const p=t.style.opacity,g=t.style.position,u=t.style.zIndex,y=t.style.top,h=t.style.left,c=t.style.display,f="horizontal"===i?t.offsetWidth:t.offsetHeight;return t.dataset.startSize=String(f),t.style.position="absolute",t.style.top=`${n}px`,t.style.left=`${r}px`,t.style.opacity=p||"0.3",t.style.zIndex="1",t.style.pointerEvents="none",t.dataset.originalOpacity=p||"",t.dataset.originalPosition=g||"",t.dataset.originalZIndex=u||"",t.dataset.originalTop=y||"",t.dataset.originalLeft=h||"",t.dataset.originalDisplay=c||"",t.parentElement.insertBefore(d,t),this.virtualNodes.set(t,d),d}updateVirtualNode(t,e,i){const a=this.virtualNodes.get(t);if(!a)return;const o="horizontal"===i?"width":"height";a.style[o]=`${e}px`}updateVirtualNodePosition(t,e,i){const a=this.virtualNodes.get(t);if(!a)return;const o="horizontal"===i?"left":"top";a.style[o]=`${e}px`}updateVirtualNodeFlexGrow(t,e,i){const a=this.virtualNodes.get(t);if(!a)return;const o=Math.max(0,Math.round(100*e)/100);a.style.flex=`${o} 1 0`}removeVirtualNode(t){const e=this.virtualNodes.get(t);e&&(void 0!==t.dataset.originalOpacity&&(t.style.opacity=t.dataset.originalOpacity,delete t.dataset.originalOpacity),void 0!==t.dataset.originalPosition&&(t.style.position=t.dataset.originalPosition,delete t.dataset.originalPosition),void 0!==t.dataset.originalZIndex&&(t.style.zIndex=t.dataset.originalZIndex,delete t.dataset.originalZIndex),void 0!==t.dataset.originalTop&&(t.style.top=t.dataset.originalTop,delete t.dataset.originalTop),void 0!==t.dataset.originalLeft&&(t.style.left=t.dataset.originalLeft,delete t.dataset.originalLeft),void 0!==t.dataset.originalDisplay&&(t.style.display=t.dataset.originalDisplay,delete t.dataset.originalDisplay),void 0!==t.dataset.startSize&&delete t.dataset.startSize,t.style.pointerEvents="",e.parentElement&&e.parentElement.removeChild(e),this.virtualNodes.delete(t))}applyToRealNode(t,e,i){const a="horizontal"===i?"width":"height";t.style[a]=`${e}px`}removeAllVirtualNodes(){Array.from(this.virtualNodes.keys()).forEach(t=>{this.removeVirtualNode(t)}),this.virtualNodes.clear()}hasVirtualNode(t){return this.virtualNodes.has(t)}getVirtualNode(t){return this.virtualNodes.get(t)||null}destroy(){this.removeAllVirtualNodes()}};
|
|
2
|
+
//# sourceMappingURL=virtualNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtualNode.js","sources":["../../src/core/virtualNode.ts"],"sourcesContent":[null],"names":["constructor","Object","defineProperty","this","value","Map","createVirtualNode","originalEl","config","direction","parentElement","virtualNodes","has","removeVirtualNode","computedStyle","window","getComputedStyle","originalFlex","style","flex","rect","getBoundingClientRect","parentRect","top","scrollTop","left","scrollLeft","virtualEl","cloneNode","cssText","margin","padding","border","boxSizing","backgroundColor","minWidth","minHeight","width","height","assign","className","originalOpacity","opacity","originalPosition","position","originalZIndex","zIndex","originalTop","originalLeft","originalDisplay","display","startSize","offsetWidth","offsetHeight","dataset","String","pointerEvents","insertBefore","set","updateVirtualNode","size","get","sizeProperty","updateVirtualNodePosition","newPosition","positionProperty","updateVirtualNodeFlexGrow","grow","_direction","roundedGrow","Math","max","round","undefined","removeChild","delete","applyToRealNode","finalSize","removeAllVirtualNodes","Array","from","keys","forEach","clear","hasVirtualNode","getVirtualNode","destroy"],"mappings":"oFAOA,MAAA,WAAAA,GACYC,OAAAC,eAAAC,KAAA,eAAA,2CAA8CC,MAAA,IAAIC,KA8O9D,CAtOI,iBAAAC,CAAkBC,EAAyBC,EAA4B,CAAA,EAAIC,EAA6B,cACpG,IAAKF,IAAeA,EAAWG,cAC3B,OAAO,KAIPP,KAAKQ,aAAaC,IAAIL,IACtBJ,KAAKU,kBAAkBN,GAI3B,MAAMO,EAAgBC,OAAOC,iBAAiBT,GACxCU,EAAeV,EAAWW,MAAMC,MAAQL,EAAcK,MAAQ,IAC9DC,EAAOb,EAAWc,wBAClBC,EAAaf,EAAWG,cAAcW,wBAGtCE,EAAMH,EAAKG,IAAMD,EAAWC,KAAOhB,EAAWG,cAAcc,WAAa,GACzEC,EAAOL,EAAKK,KAAOH,EAAWG,MAAQlB,EAAWG,cAAcgB,YAAc,GAG7EC,EAAYpB,EAAWqB,WAAU,GAGvCD,EAAUT,MAAMW,QAAU,uBACdZ,2BACEH,EAAcgB,iCACbhB,EAAciB,iCACfjB,EAAckB,oCACVlB,EAAcmB,wIAIRnB,EAAcoB,iBAAmB,+IAGxCpB,EAAcqB,sCACbrB,EAAcsB,kCACnBtB,EAAcuB,+BACbvB,EAAcwB,oBAIxB9B,EAAOU,OACPjB,OAAOsC,OAAOZ,EAAUT,MAAOV,EAAOU,OAItCV,EAAOgC,YACPb,EAAUa,UAAYhC,EAAOgC,WAKjC,MAAMC,EAAkBlC,EAAWW,MAAMwB,QACnCC,EAAmBpC,EAAWW,MAAM0B,SACpCC,EAAiBtC,EAAWW,MAAM4B,OAClCC,EAAcxC,EAAWW,MAAMK,IAC/ByB,EAAezC,EAAWW,MAAMO,KAChCwB,EAAkB1C,EAAWW,MAAMgC,QAGnCC,EAA0B,eAAd1C,EAA6BF,EAAW6C,YAAc7C,EAAW8C,aA0BnF,OAzBA9C,EAAW+C,QAAQH,UAAYI,OAAOJ,GAItC5C,EAAWW,MAAM0B,SAAW,WAC5BrC,EAAWW,MAAMK,IAAM,GAAGA,MAC1BhB,EAAWW,MAAMO,KAAO,GAAGA,MAC3BlB,EAAWW,MAAMwB,QAAUD,GAAmB,MAC9ClC,EAAWW,MAAM4B,OAAS,IAC1BvC,EAAWW,MAAMsC,cAAgB,OAGjCjD,EAAW+C,QAAQb,gBAAkBA,GAAmB,GACxDlC,EAAW+C,QAAQX,iBAAmBA,GAAoB,GAC1DpC,EAAW+C,QAAQT,eAAiBA,GAAkB,GACtDtC,EAAW+C,QAAQP,YAAcA,GAAe,GAChDxC,EAAW+C,QAAQN,aAAeA,GAAgB,GAClDzC,EAAW+C,QAAQL,gBAAkBA,GAAmB,GAGxD1C,EAAWG,cAAc+C,aAAa9B,EAAWpB,GAGjDJ,KAAKQ,aAAa+C,IAAInD,EAAYoB,GAE3BA,CACX,CAQA,iBAAAgC,CAAkBpD,EAAyBqD,EAAcnD,GACrD,MAAMkB,EAAYxB,KAAKQ,aAAakD,IAAItD,GACxC,IAAKoB,EAAW,OAEhB,MAAMmC,EAA6B,eAAdrD,EAA6B,QAAU,SAC5DkB,EAAUT,MAAM4C,GAAgB,GAAGF,KACvC,CAQA,yBAAAG,CAA0BxD,EAAyByD,EAAqBvD,GACpE,MAAMkB,EAAYxB,KAAKQ,aAAakD,IAAItD,GACxC,IAAKoB,EAAW,OAEhB,MAAMsC,EAAiC,eAAdxD,EAA6B,OAAS,MAC/DkB,EAAUT,MAAM+C,GAAoB,GAAGD,KAC3C,CAQA,yBAAAE,CAA0B3D,EAAyB4D,EAAcC,GAC7D,MAAMzC,EAAYxB,KAAKQ,aAAakD,IAAItD,GACxC,IAAKoB,EAAW,OAGhB,MAAM0C,EAAcC,KAAKC,IAAI,EAAGD,KAAKE,MAAa,IAAPL,GAAc,KAIzDxC,EAAUT,MAAMC,KAAO,GAAGkD,OAC9B,CAMA,iBAAAxD,CAAkBN,GACd,MAAMoB,EAAYxB,KAAKQ,aAAakD,IAAItD,GACnCoB,SAGsC8C,IAAvClE,EAAW+C,QAAQb,kBACnBlC,EAAWW,MAAMwB,QAAUnC,EAAW+C,QAAQb,uBACvClC,EAAW+C,QAAQb,sBAEcgC,IAAxClE,EAAW+C,QAAQX,mBACnBpC,EAAWW,MAAM0B,SAAWrC,EAAW+C,QAAQX,wBACxCpC,EAAW+C,QAAQX,uBAEY8B,IAAtClE,EAAW+C,QAAQT,iBACnBtC,EAAWW,MAAM4B,OAASvC,EAAW+C,QAAQT,sBACtCtC,EAAW+C,QAAQT,qBAES4B,IAAnClE,EAAW+C,QAAQP,cACnBxC,EAAWW,MAAMK,IAAMhB,EAAW+C,QAAQP,mBACnCxC,EAAW+C,QAAQP,kBAEU0B,IAApClE,EAAW+C,QAAQN,eACnBzC,EAAWW,MAAMO,KAAOlB,EAAW+C,QAAQN,oBACpCzC,EAAW+C,QAAQN,mBAEayB,IAAvClE,EAAW+C,QAAQL,kBACnB1C,EAAWW,MAAMgC,QAAU3C,EAAW+C,QAAQL,uBACvC1C,EAAW+C,QAAQL,sBAEOwB,IAAjClE,EAAW+C,QAAQH,kBACZ5C,EAAW+C,QAAQH,UAE9B5C,EAAWW,MAAMsC,cAAgB,GAG7B7B,EAAUjB,eACViB,EAAUjB,cAAcgE,YAAY/C,GAIxCxB,KAAKQ,aAAagE,OAAOpE,GAC7B,CAQA,eAAAqE,CAAgBrE,EAAyBsE,EAAmBpE,GACxD,MAAMqD,EAA6B,eAAdrD,EAA6B,QAAU,SAC5DF,EAAWW,MAAM4C,GAAgB,GAAGe,KACxC,CAKA,qBAAAC,GAC0BC,MAAMC,KAAK7E,KAAKQ,aAAasE,QACrCC,QAAQ3E,IAClBJ,KAAKU,kBAAkBN,KAE3BJ,KAAKQ,aAAawE,OACtB,CAOA,cAAAC,CAAe7E,GACX,OAAOJ,KAAKQ,aAAaC,IAAIL,EACjC,CAOA,cAAA8E,CAAe9E,GACX,OAAOJ,KAAKQ,aAAakD,IAAItD,IAAe,IAChD,CAKA,OAAA+E,GACInF,KAAK2E,uBACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
class e{constructor(){Object.defineProperty(this,"indexMap",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"elementMap",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"head",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"tail",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"nextIndex",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"freeIndices",{enumerable:!0,configurable:!0,writable:!0,value:[]})}register(e,t){const n=this.elementMap.get(e);if(n)return n.info={panelEl:e,minSize:t},n.index;let i;this.freeIndices.length>0?(this.freeIndices.sort((e,t)=>e-t),i=this.freeIndices[0]<this.nextIndex?this.freeIndices.shift():this.nextIndex++):i=this.nextIndex++;const l={index:i,info:{panelEl:e,minSize:t},prev:this.tail,next:null};return this.tail?this.tail.next=l:this.head=l,this.tail=l,this.indexMap.set(i,l),this.elementMap.set(e,l),i}unregister(e){const t=this.elementMap.get(e);t&&(t.prev?t.prev.next=t.next:this.head=t.next,t.next?t.next.prev=t.prev:this.tail=t.prev,this.freeIndices.push(t.index),this.indexMap.delete(t.index),this.elementMap.delete(e))}getByIndex(e){return this.indexMap.get(e)?.info||null}getIndex(e){return this.elementMap.get(e)?.index||-1}getPrev(e){return e.prev||null}getNext(e){return e.next||null}getHead(){return this.head||null}getTail(){return this.tail||null}getNodeByElement(e){return this.elementMap.get(e)||null}getNodeByIndex(e){return this.indexMap.get(e)||null}getAllPanels(){const e=[];let t=this.head;for(;t;)e.push(t.info),t=t.next;return e}getAllPanelElements(){const e=[];let t=this.head;for(;t;)e.push(t.info.panelEl),t=t.next;return e}getCount(){return this.indexMap.size}clear(){this.indexMap.clear(),this.elementMap.clear(),this.head=null,this.tail=null,this.nextIndex=0,this.freeIndices=[]}forEach(e){let t=this.head,n=0;for(;t;)e(t,n),t=t.next,n++}}export{e as PanelManager};
|
|
2
|
+
//# sourceMappingURL=PanelManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelManager.js","sources":["../../../src/core/PanelManager.ts"],"sourcesContent":[null],"names":["PanelManager","constructor","Object","defineProperty","this","value","Map","register","panelEl","minSize","existingNode","elementMap","get","info","index","freeIndices","length","sort","a","b","nextIndex","shift","node","prev","tail","next","head","indexMap","set","unregister","push","delete","getByIndex","getIndex","getPrev","getNext","getHead","getTail","getNodeByElement","getNodeByIndex","getAllPanels","panels","current","getAllPanelElements","elements","getCount","size","clear","forEach","callback"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
class t{constructor(){Object.defineProperty(this,"virtualNodes",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}createVirtualNode(t,e={},i="horizontal"){if(!t||!t.parentElement)return null;this.virtualNodes.has(t)&&this.removeVirtualNode(t);const a=window.getComputedStyle(t),o=t.style.flex||a.flex||"1",l=t.getBoundingClientRect(),s=t.parentElement.getBoundingClientRect(),n=l.top-s.top+(t.parentElement.scrollTop||0),r=l.left-s.left+(t.parentElement.scrollLeft||0),d=t.cloneNode(!1);d.style.cssText=`\n flex: ${o};\n margin: ${a.margin};\n padding: ${a.padding};\n border: ${a.border};\n box-sizing: ${a.boxSizing};\n pointer-events: none;\n z-index: 10000;\n opacity: 0.8;\n background-color: ${a.backgroundColor||"rgba(0, 123, 255, 0.1)"};\n overflow: hidden;\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.3);\n min-width: ${a.minWidth};\n min-height: ${a.minHeight};\n width: ${a.width};\n height: ${a.height};\n `,e.style&&Object.assign(d.style,e.style),e.className&&(d.className=e.className);const g=t.style.opacity,p=t.style.position,h=t.style.zIndex,y=t.style.top,u=t.style.left,c=t.style.display,f="horizontal"===i?t.offsetWidth:t.offsetHeight;return t.dataset.startSize=String(f),t.style.position="absolute",t.style.top=`${n}px`,t.style.left=`${r}px`,t.style.opacity=g||"0.3",t.style.zIndex="1",t.style.pointerEvents="none",t.dataset.originalOpacity=g||"",t.dataset.originalPosition=p||"",t.dataset.originalZIndex=h||"",t.dataset.originalTop=y||"",t.dataset.originalLeft=u||"",t.dataset.originalDisplay=c||"",t.parentElement.insertBefore(d,t),this.virtualNodes.set(t,d),d}updateVirtualNode(t,e,i){const a=this.virtualNodes.get(t);if(!a)return;const o="horizontal"===i?"width":"height";a.style[o]=`${e}px`}updateVirtualNodePosition(t,e,i){const a=this.virtualNodes.get(t);if(!a)return;const o="horizontal"===i?"left":"top";a.style[o]=`${e}px`}updateVirtualNodeFlexGrow(t,e,i){const a=this.virtualNodes.get(t);if(!a)return;const o=Math.max(0,Math.round(100*e)/100);a.style.flex=`${o} 1 0`}removeVirtualNode(t){const e=this.virtualNodes.get(t);e&&(void 0!==t.dataset.originalOpacity&&(t.style.opacity=t.dataset.originalOpacity,delete t.dataset.originalOpacity),void 0!==t.dataset.originalPosition&&(t.style.position=t.dataset.originalPosition,delete t.dataset.originalPosition),void 0!==t.dataset.originalZIndex&&(t.style.zIndex=t.dataset.originalZIndex,delete t.dataset.originalZIndex),void 0!==t.dataset.originalTop&&(t.style.top=t.dataset.originalTop,delete t.dataset.originalTop),void 0!==t.dataset.originalLeft&&(t.style.left=t.dataset.originalLeft,delete t.dataset.originalLeft),void 0!==t.dataset.originalDisplay&&(t.style.display=t.dataset.originalDisplay,delete t.dataset.originalDisplay),void 0!==t.dataset.startSize&&delete t.dataset.startSize,t.style.pointerEvents="",e.parentElement&&e.parentElement.removeChild(e),this.virtualNodes.delete(t))}applyToRealNode(t,e,i){const a="horizontal"===i?"width":"height";t.style[a]=`${e}px`}removeAllVirtualNodes(){Array.from(this.virtualNodes.keys()).forEach(t=>{this.removeVirtualNode(t)}),this.virtualNodes.clear()}hasVirtualNode(t){return this.virtualNodes.has(t)}getVirtualNode(t){return this.virtualNodes.get(t)||null}destroy(){this.removeAllVirtualNodes()}}export{t as default};
|
|
2
|
+
//# sourceMappingURL=virtualNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtualNode.js","sources":["../../../src/core/virtualNode.ts"],"sourcesContent":[null],"names":["VirtualNodeManager","constructor","Object","defineProperty","this","value","Map","createVirtualNode","originalEl","config","direction","parentElement","virtualNodes","has","removeVirtualNode","computedStyle","window","getComputedStyle","originalFlex","style","flex","rect","getBoundingClientRect","parentRect","top","scrollTop","left","scrollLeft","virtualEl","cloneNode","cssText","margin","padding","border","boxSizing","backgroundColor","minWidth","minHeight","width","height","assign","className","originalOpacity","opacity","originalPosition","position","originalZIndex","zIndex","originalTop","originalLeft","originalDisplay","display","startSize","offsetWidth","offsetHeight","dataset","String","pointerEvents","insertBefore","set","updateVirtualNode","size","get","sizeProperty","updateVirtualNodePosition","newPosition","positionProperty","updateVirtualNodeFlexGrow","grow","_direction","roundedGrow","Math","max","round","undefined","removeChild","delete","applyToRealNode","finalSize","removeAllVirtualNodes","Array","from","keys","forEach","clear","hasVirtualNode","getVirtualNode","destroy"],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
-
export { ResizePanelGroup as ResizablePanelGroup, ResizePanelGroup as ResizeablePanelGroup } from './components/ResizePanelGroup/index.js';
|
|
2
|
-
export { ResizePanel as ResizablePanel, ResizePanel as ResizeablePanel } from './components/ResizePanel/index.js';
|
|
3
|
-
export {
|
|
1
|
+
export { ResizePanelGroup as ResizablePanelGroup, ResizePanelGroup, ResizePanelGroupProps, ResizePanelGroup as ResizeablePanelGroup } from './strategies/basic/components/ResizePanelGroup/index.js';
|
|
2
|
+
export { ResizePanel as ResizablePanel, ResizePanel, ResizePanelProps, ResizePanel as ResizeablePanel } from './strategies/basic/components/ResizePanel/index.js';
|
|
3
|
+
export { ResizeHandle, ResizeHandleProps } from './strategies/basic/components/ResizeHandle/index.js';
|
|
4
|
+
export { ResizableContext, ResizableContextValue, useResizableContext } from './strategies/basic/context.js';
|
|
5
|
+
export { ResizePanelGroupLinked, ResizePanelGroupLinkedProps } from './strategies/linked/components/ResizePanelGroupLinked/index.js';
|
|
6
|
+
export { ResizePanelLinked, ResizePanelLinkedProps } from './strategies/linked/components/ResizePanelLinked/index.js';
|
|
7
|
+
export { ResizeHandleLinked, ResizeHandleLinkedProps } from './strategies/linked/components/ResizeHandleLinked/index.js';
|
|
8
|
+
export { ResizableContextLinked, ResizableContextLinkedValue, useResizableContextLinked } from './strategies/linked/context.js';
|
|
9
|
+
export { ResizePanelGroupFlex, ResizePanelGroupFlexProps } from './strategies/flex/components/ResizePanelGroupFlex/index.js';
|
|
10
|
+
export { ResizeHandleFlex, ResizeHandleFlexProps } from './strategies/flex/components/ResizeHandleFlex/index.js';
|
|
11
|
+
export { ResizePanelGroupFlexLinked, ResizePanelGroupFlexLinkedProps } from './strategies/flex-linked/components/ResizePanelGroupFlexLinked/index.js';
|
|
12
|
+
export { ResizePanelFlexLinked, ResizePanelFlexLinkedProps } from './strategies/flex-linked/components/ResizePanelFlexLinked/index.js';
|
|
13
|
+
export { ResizeHandleFlexLinked, ResizeHandleFlexLinkedProps } from './strategies/flex-linked/components/ResizeHandleFlexLinked/index.js';
|
|
14
|
+
export { OptimizationStrategy, PanelInfo, PanelNode, ResizeAbleCoreLinkedOptions, ResizeAbleCoreOptions, ResizeDirection, VirtualConfig, VirtualNodeConfig } from './types/index.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export { ResizePanel as ResizablePanel, ResizePanel as ResizeablePanel } from './components/ResizePanel/index.js';
|
|
3
|
-
import 'react/jsx-runtime';
|
|
4
|
-
import 'react';
|
|
5
|
-
import './components/shared/context.js';
|
|
1
|
+
export{ResizePanelGroup as ResizablePanelGroup,ResizePanelGroup,ResizePanelGroup as ResizeablePanelGroup}from"./strategies/basic/components/ResizePanelGroup/index.js";export{ResizePanel as ResizablePanel,ResizePanel,ResizePanel as ResizeablePanel}from"./strategies/basic/components/ResizePanel/index.js";export{ResizeHandle}from"./strategies/basic/components/ResizeHandle/index.js";export{ResizePanelGroupLinked}from"./strategies/linked/components/ResizePanelGroupLinked/index.js";export{ResizePanelLinked}from"./strategies/linked/components/ResizePanelLinked/index.js";export{ResizeHandleLinked}from"./strategies/linked/components/ResizeHandleLinked/index.js";export{ResizePanelGroupFlex}from"./strategies/flex/components/ResizePanelGroupFlex/index.js";export{ResizeHandleFlex}from"./strategies/flex/components/ResizeHandleFlex/index.js";export{ResizePanelGroupFlexLinked}from"./strategies/flex-linked/components/ResizePanelGroupFlexLinked/index.js";export{ResizePanelFlexLinked}from"./strategies/flex-linked/components/ResizePanelFlexLinked/index.js";export{ResizeHandleFlexLinked}from"./strategies/flex-linked/components/ResizeHandleFlexLinked/index.js";export{ResizableContext,useResizableContext}from"./strategies/basic/context.js";export{ResizableContextLinked,useResizableContextLinked}from"./strategies/linked/context.js";
|
|
6
2
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ResizeDirection } from '../../../../types/index.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 拖拽手柄组件(常规策略)
|
|
6
|
+
* 负责处理面板之间的拖拽调整功能
|
|
7
|
+
* 使用 ResizeAbleCore(常规策略)
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
interface ResizeHandleProps {
|
|
11
|
+
prePanelIndex: number;
|
|
12
|
+
nextPanelIndex: number;
|
|
13
|
+
direction: ResizeDirection;
|
|
14
|
+
}
|
|
15
|
+
declare const ResizeHandle: React.FC<ResizeHandleProps>;
|
|
16
|
+
|
|
17
|
+
export { ResizeHandle };
|
|
18
|
+
export type { ResizeHandleProps };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{useRef as n,useEffect as t}from"react";import r from"../../resizeAble.js";import{useResizableContext as o}from"../../context.js";const i=({prePanelIndex:i,nextPanelIndex:l,direction:s})=>{const u=n(null),c=n(null),{getPanelInfo:a,panelCount:d,virtualConfig:m}=o();t(()=>{if(!u.current)return;const e=a(i),n=a(l);if(!e||!n)return;const t=u.current?"horizontal"===s?u.current.offsetWidth:u.current.offsetHeight:10;c.current=new r({prePanelEl:e.panelEl,nextPanelEl:n.panelEl,getPanelInfo:a,prePanelIndex:i,nextPanelIndex:l,direction:s,virtualEnabled:m.enabled||!1,virtualConfig:{style:m.style,className:m.className},handleSize:t});const o=u.current;if(!o)return;let d=!1,f=0;const p=e=>{e.preventDefault(),e.stopPropagation(),d=!0,f="horizontal"===s?e.clientX:e.clientY,c.current&&c.current.startResize()},v=e=>{if(!d||!c.current)return;const n=("horizontal"===s?e.clientX:e.clientY)-f;c.current.onResize(n)},x=()=>{d&&c.current&&(d=!1,c.current.endResize())};return o.addEventListener("mousedown",p),document.addEventListener("mousemove",v),document.addEventListener("mouseup",x),()=>{o.removeEventListener("mousedown",p),document.removeEventListener("mousemove",v),document.removeEventListener("mouseup",x),c.current&&(c.current.destroy(),c.current=null)}},[i,l,s,a,d,m]);const f="horizontal"===s;return e("div",{ref:u,style:{position:"relative",width:f?"10px":"100%",height:f?"100%":"10px",backgroundColor:"#000",cursor:f?"ew-resize":"ns-resize",zIndex:1e3,flexShrink:0}})};export{i as ResizeHandle};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/strategies/basic/components/ResizeHandle/index.tsx"],"sourcesContent":[null],"names":["ResizeHandle","prePanelIndex","nextPanelIndex","direction","handleRef","useRef","coreInstanceRef","getPanelInfo","panelCount","virtualConfig","useResizableContext","useEffect","current","prePanelInfo","nextPanelInfo","handleSize","offsetWidth","offsetHeight","ResizeAbleCore","prePanelEl","panelEl","nextPanelEl","virtualEnabled","enabled","style","className","handleEl","isResizing","startPos","startResize","e","preventDefault","stopPropagation","clientX","clientY","onResizeMove","delta","onResize","endResize","addEventListener","document","removeEventListener","destroy","isHorizontal","_jsx","ref","position","width","height","backgroundColor","cursor","zIndex","flexShrink"],"mappings":"gLAgBO,MAAMA,EAA4C,EACrDC,gBACAC,iBACAC,gBAEA,MAAMC,EAAYC,EAAuB,MACnCC,EAAkBD,EAAmD,OACrEE,aAAEA,EAAYC,WAAEA,EAAUC,cAAEA,GAAkBC,IAEpDC,EAAU,KACN,IAAKP,EAAUQ,QACX,OAIJ,MAAMC,EAAeN,EAAaN,GAC5Ba,EAAgBP,EAAaL,GACnC,IAAIW,IAAiBC,EAEjB,OAIJ,MAAMC,EAAaX,EAAUQ,QACR,eAAdT,EACGC,EAAUQ,QAAQI,YAClBZ,EAAUQ,QAAQK,aACQ,GAGpCX,EAAgBM,QAAU,IAAIM,EAAe,CACzCC,WAAYN,EAAaO,QACzBC,YAAaP,EAAcM,QAC3Bb,eACAN,gBACAC,iBACAC,YACAmB,eAAgBb,EAAcc,UAAW,EACzCd,cAAe,CACXe,MAAOf,EAAce,MACrBC,UAAWhB,EAAcgB,WAE7BV,eAIJ,MAAMW,EAAWtB,EAAUQ,QAC3B,IAAKc,EAAU,OAEf,IAAIC,GAAa,EACbC,EAAW,EAEf,MAAMC,EAAeC,IACjBA,EAAEC,iBACFD,EAAEE,kBACFL,GAAa,EACbC,EAAyB,eAAdzB,EAA6B2B,EAAEG,QAAUH,EAAEI,QAClD5B,EAAgBM,SAChBN,EAAgBM,QAAQiB,eAI1BM,EAAgBL,IAClB,IAAIH,IAAerB,EAAgBM,QAAS,OAC5C,MACMwB,GAD2B,eAAdjC,EAA6B2B,EAAEG,QAAUH,EAAEI,SACnCN,EAE3BtB,EAAgBM,QAAQyB,SAASD,IAG/BE,EAAY,KACXX,GAAcrB,EAAgBM,UAC7Be,GAAa,EACbrB,EAAgBM,QAAQ0B,cAQhC,OAJAZ,EAASa,iBAAiB,YAAaV,GACvCW,SAASD,iBAAiB,YAAaJ,GACvCK,SAASD,iBAAiB,UAAWD,GAE9B,KACHZ,EAASe,oBAAoB,YAAaZ,GAC1CW,SAASC,oBAAoB,YAAaN,GAC1CK,SAASC,oBAAoB,UAAWH,GACrChC,EAAgBM,UACfN,EAAgBM,QAAQ8B,UACxBpC,EAAgBM,QAAU,QAGnC,CAACX,EAAeC,EAAgBC,EAAWI,EAAcC,EAAYC,IAExE,MAAMkC,EAA6B,eAAdxC,EACrB,OACIyC,EAAA,MAAA,CACIC,IAAKzC,EACLoB,MAAO,CACHsB,SAAU,WACVC,MAAOJ,EAAe,OAAS,OAC/BK,OAAQL,EAAe,OAAS,OAChCM,gBAAiB,OACjBC,OAAQP,EAAe,YAAc,YACrCQ,OAAQ,IACRC,WAAY"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{useRef as e,useEffect as t}from"react";import{useResizableContext as i}from"../../context.js";const n=({children:n,minSize:o=100})=>{const c=e(null),d=e(-1),{registerPanel:l,unregisterPanel:h,direction:m}=i();return t(()=>{if(!c.current)return;const r=c.current;return d.current=l(r,o),()=>{h(r)}},[o,l,h]),r("div",{ref:c,style:{flex:1,minWidth:"horizontal"===m?o:void 0,minHeight:"vertical"===m?o:void 0,width:"auto",overflow:"hidden",position:"relative"},children:r("div",{style:{height:"100%",padding:16},children:n})})};export{n as ResizePanel};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/strategies/basic/components/ResizePanel/index.tsx"],"sourcesContent":[null],"names":["ResizePanel","children","minSize","panelRef","useRef","panelIndexRef","registerPanel","unregisterPanel","direction","useResizableContext","useEffect","current","panelEl","_jsx","ref","style","flex","minWidth","undefined","minHeight","width","overflow","position","height","padding"],"mappings":"6IAcO,MAAMA,EAA0C,EACnDC,WACAC,UAAU,QAGV,MAAMC,EAAWC,EAAuB,MAClCC,EAAgBD,OAChBE,cAAEA,EAAaC,gBAAEA,EAAeC,UAAEA,GAAcC,IAWtD,OATAC,EAAU,KACN,IAAIP,EAASQ,QAAS,OACtB,MAAMC,EAAUT,EAASQ,QAEzB,OADAN,EAAcM,QAAUL,EAAcM,EAASV,GACxC,KACHK,EAAgBK,KAErB,CAACV,EAASI,EAAeC,IAGxBM,EAAA,MAAA,CACIC,IAAKX,EACLY,MAAO,CACHC,KAAM,EACNC,SAAwB,eAAdT,EAA6BN,OAAUgB,EACjDC,UAAyB,aAAdX,EAA2BN,OAAUgB,EAChDE,MAAO,OACPC,SAAU,SACVC,SAAU,YACbrB,SAEDY,SAAKE,MAAO,CAACQ,OAAQ,OAAQC,QAAS,IAAGvB,SACpCA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { ResizeDirection, VirtualConfig } from '
|
|
2
|
+
import { ResizeDirection, VirtualConfig } from '../../../../types/index.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* 可调整大小的面板组容器组件(常规策略)
|
|
6
|
+
* 使用数组存储面板信息,适合面板数量较少的场景
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
interface ResizePanelGroupProps {
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import r,{useRef as n,useState as t,useCallback as l}from"react";import{ResizableContext as i}from"../../context.js";import{ResizeHandle as o}from"../ResizeHandle/index.js";const u=({children:u,direction:c="horizontal",style:a,virtual:s=!1,virtualConfig:d={}})=>{const h=n([]),f=n(new Map),[p,g]=t(0),m=l((e,r)=>{const n=f.current.get(e);if(void 0!==n)return h.current[n]={panelEl:e,minSize:r},n;let t=-1;for(let e=0;e<h.current.length;e++)if(!h.current[e]){t=e;break}return-1===t?(t=h.current.length,h.current.push({panelEl:e,minSize:r})):h.current[t]={panelEl:e,minSize:r},f.current.set(e,t),g(h.current.filter(e=>null!=e).length),t},[]),x=l(e=>{const r=f.current.get(e);void 0!==r&&(h.current[r]=null,f.current.delete(e),g(h.current.filter(e=>null!=e).length))},[]),v=l(e=>{if(e<0||e>=h.current.length)return null;const r=h.current[e];return r&&r.panelEl?r:null},[]),P=l(e=>f.current.get(e)??-1,[]),z=r.Children.toArray(u),E=[];z.forEach((r,n)=>{E.push(r),n<z.length-1&&E.push(e(o,{prePanelIndex:n,nextPanelIndex:n+1,direction:c},`handle-${n}`))});const I={enabled:s,...d},y={panelCount:p,registerPanel:m,unregisterPanel:x,getPanelInfo:v,getPanelIndex:P,direction:c,panelInfos:h.current.filter(e=>null!=e),virtualConfig:I};return e(i.Provider,{value:y,children:e("div",{style:{display:"flex",flexDirection:"horizontal"===c?"row":"column",height:"100%",position:"relative",...a},children:E})})};export{u as ResizePanelGroup};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|