react-public-components 0.1.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/README.md +178 -0
- package/dist/index.cjs +600 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +100 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +46 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.js +562 -0
- package/dist/index.js.map +1 -0
- package/package.json +57 -0
package/README.md
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# React 组件库说明文档
|
|
2
|
+
|
|
3
|
+
本仓库包含两个独立的 React 组件:
|
|
4
|
+
|
|
5
|
+
1. **CollapseBox** — 可折叠的内容容器组件
|
|
6
|
+
2. **Splitter** — 可拖拽调整、可折叠的分屏面板组件
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 一、CollapseBox 可折叠容器
|
|
11
|
+
|
|
12
|
+
### 简介
|
|
13
|
+
|
|
14
|
+
`CollapseBox` 是一个带切换按钮的可折叠容器。支持水平(左右收起)与垂直(上下收起)两种方向,按钮可放置在容器四条边的任意一侧,适合用作侧边栏、详情面板等可隐藏区域。
|
|
15
|
+
|
|
16
|
+
### 引入方式
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
import CollapsibleBox from './CollapseBox';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Props
|
|
23
|
+
|
|
24
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
25
|
+
| ---------------- | --------------------------------------------- | ---------- | ----------------------------------------------------------------------------- |
|
|
26
|
+
| `children` | `ReactNode` | - | 容器内部渲染的内容 |
|
|
27
|
+
| `title` | `string` | `'内容区域'` | 标题(当前版本内部隐藏渲染,仅作为占位属性保留) |
|
|
28
|
+
| `direction` | `'horizontal' \| 'vertical'` | `'horizontal'` | 折叠方向:`horizontal` 沿 X 轴收起,`vertical` 沿 Y 轴收起 |
|
|
29
|
+
| `buttonPosition` | `'right' \| 'left' \| 'top' \| 'bottom'` | `'right'` | 切换按钮位置。`horizontal` 时建议 `left`/`right`,`vertical` 时建议 `top`/`bottom` |
|
|
30
|
+
| `defaultWidth` | `number` | `600` | 容器宽度(`horizontal` 模式下展开时的宽度,单位 px) |
|
|
31
|
+
| `defaultHeight` | `number` | `300` | 容器高度(`vertical` 模式下展开时的高度,单位 px) |
|
|
32
|
+
| `contentPadding` | `string` | `'16px'` | 内容区内边距 |
|
|
33
|
+
| `headerHeight` | `number` | `16` | 头部预留高度,用于计算内容区最大高度 |
|
|
34
|
+
|
|
35
|
+
### 基础用法
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
import CollapsibleBox from './CollapseBox';
|
|
39
|
+
|
|
40
|
+
export default function Demo() {
|
|
41
|
+
return (
|
|
42
|
+
<CollapsibleBox
|
|
43
|
+
direction="horizontal"
|
|
44
|
+
buttonPosition="right"
|
|
45
|
+
defaultWidth={500}
|
|
46
|
+
defaultHeight={400}
|
|
47
|
+
>
|
|
48
|
+
<p>这里是折叠容器中的内容。</p>
|
|
49
|
+
</CollapsibleBox>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 垂直方向示例
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
<CollapsibleBox direction="vertical" buttonPosition="bottom" defaultHeight={300}>
|
|
58
|
+
<p>上下方向折叠的内容。</p>
|
|
59
|
+
</CollapsibleBox>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 依赖说明
|
|
63
|
+
|
|
64
|
+
组件内部引入了以下静态资源(位于 `@/assets/images/`):
|
|
65
|
+
|
|
66
|
+
- `arrow_down.png`
|
|
67
|
+
- `arrow_up.png`
|
|
68
|
+
- `arrow_left.png`
|
|
69
|
+
- `arrow_right.png`
|
|
70
|
+
|
|
71
|
+
并使用了 `lodash` 的 `isNumber`。在使用前请确保:
|
|
72
|
+
|
|
73
|
+
1. 项目中已配置 `@` 路径别名指向 `src`;
|
|
74
|
+
2. 已安装 `lodash`;
|
|
75
|
+
3. 已配置 less 加载器(`.less` 文件使用 less 编写)。
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 二、Splitter 分屏面板
|
|
80
|
+
|
|
81
|
+
### 简介
|
|
82
|
+
|
|
83
|
+
`Splitter` 是一个支持拖拽调整大小、可折叠、可重置的分屏面板组件,灵感来自 Ant Design 的 Splitter,但提供了更精细的折叠按钮交互。支持 `horizontal`(左右分屏)与 `vertical`(上下分屏)两种方向。
|
|
84
|
+
|
|
85
|
+
### 引入方式
|
|
86
|
+
|
|
87
|
+
```tsx
|
|
88
|
+
import Splitter from './Splitter';
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Splitter Props
|
|
92
|
+
|
|
93
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
94
|
+
| --------------- | ------------------------------------- | ------------ | ------------------------------------------ |
|
|
95
|
+
| `children` | `ReactNode`(必须为 `Splitter.Panel`)| - | 面板集合,建议 2 个及以上 |
|
|
96
|
+
| `className` | `string` | - | 根节点自定义类名 |
|
|
97
|
+
| `style` | `CSSProperties` | - | 根节点自定义样式 |
|
|
98
|
+
| `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | 分屏方向(优先级高于 `vertical`) |
|
|
99
|
+
| `vertical` | `boolean` | `false` | 是否垂直分屏(兼容写法) |
|
|
100
|
+
| `lazy` | `boolean` | `false` | 是否在拖拽结束时才更新视图(提升性能) |
|
|
101
|
+
| `onResizeStart` | `(sizes: number[]) => void` | - | 拖拽开始回调 |
|
|
102
|
+
| `onResize` | `(sizes: number[]) => void` | - | 拖拽过程中尺寸变化回调 |
|
|
103
|
+
| `onResizeEnd` | `(sizes: number[]) => void` | - | 拖拽/折叠/重置结束回调 |
|
|
104
|
+
|
|
105
|
+
### Splitter.Panel Props
|
|
106
|
+
|
|
107
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
108
|
+
| --------------- | ----------------------------- | ------ | ------------------------------------------------------------- |
|
|
109
|
+
| `children` | `ReactNode` | - | 面板内容 |
|
|
110
|
+
| `size` | `number \| '${number}%'` | - | 受控尺寸 |
|
|
111
|
+
| `defaultSize` | `number \| '${number}%'` | - | 初始尺寸(未设置时按剩余空间平均分配) |
|
|
112
|
+
| `min` | `number \| '${number}%'` | `0` | 最小尺寸 |
|
|
113
|
+
| `max` | `number \| '${number}%'` | - | 最大尺寸 |
|
|
114
|
+
| `collapsible` | `boolean` | `false`| 是否显示折叠按钮 |
|
|
115
|
+
| `resizable` | `boolean` | `true` | 是否允许拖拽调整(两侧任一为 `false` 都会禁用对应分隔条) |
|
|
116
|
+
| `style` | `CSSProperties` | - | 面板自定义样式 |
|
|
117
|
+
|
|
118
|
+
### 基础用法
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
import Splitter from './Splitter';
|
|
122
|
+
|
|
123
|
+
export default function Demo() {
|
|
124
|
+
return (
|
|
125
|
+
<Splitter style={{ height: 400 }}>
|
|
126
|
+
<Splitter.Panel defaultSize="40%" min="20%">
|
|
127
|
+
<p>左侧面板</p>
|
|
128
|
+
</Splitter.Panel>
|
|
129
|
+
<Splitter.Panel>
|
|
130
|
+
<p>右侧面板</p>
|
|
131
|
+
</Splitter.Panel>
|
|
132
|
+
</Splitter>
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 可折叠 + 受控尺寸示例
|
|
138
|
+
|
|
139
|
+
```tsx
|
|
140
|
+
<Splitter
|
|
141
|
+
orientation="vertical"
|
|
142
|
+
onResizeEnd={(sizes) => console.log('最终尺寸:', sizes)}
|
|
143
|
+
>
|
|
144
|
+
<Splitter.Panel defaultSize="30%" collapsible min="10%">
|
|
145
|
+
<p>上方面板(可折叠)</p>
|
|
146
|
+
</Splitter.Panel>
|
|
147
|
+
<Splitter.Panel collapsible>
|
|
148
|
+
<p>下方面板(可折叠)</p>
|
|
149
|
+
</Splitter.Panel>
|
|
150
|
+
</Splitter>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 交互说明
|
|
154
|
+
|
|
155
|
+
- **拖拽调整**:在两个面板之间的分隔条上按下鼠标拖动即可调整两侧尺寸。
|
|
156
|
+
- **折叠**:分隔条上会渲染两个折叠按钮,分别用于折叠左/上面板与右/下面板。
|
|
157
|
+
- **重置**:双击分隔条可重置为初始尺寸。
|
|
158
|
+
- **键盘控制**:分隔条聚焦后使用方向键调整(`Shift + 方向键` 步长放大)。
|
|
159
|
+
- **百分比/像素**:`size`、`defaultSize`、`min`、`max` 均支持数字(px)或 `'${number}%'` 字符串。
|
|
160
|
+
|
|
161
|
+
### 依赖说明
|
|
162
|
+
|
|
163
|
+
- `react`(含 hooks、Children API)
|
|
164
|
+
- `antd`(`Space`、`Tooltip`)
|
|
165
|
+
- `@ant-design/icons`(折叠方向图标)
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 三、目录结构
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
.
|
|
173
|
+
├── CollapseBox/
|
|
174
|
+
│ ├── index.tsx
|
|
175
|
+
│ └── index.less
|
|
176
|
+
└── Splitter/
|
|
177
|
+
└── index.tsx
|
|
178
|
+
```
|