u-space 0.0.0-alpha.2 → 0.0.2
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 +1 -1
- package/dist/index.js +104 -76
- package/dist/plugins/object-controls/ObjectControls.d.ts +69 -0
- package/dist/plugins/object-controls/index.cjs +1 -0
- package/dist/plugins/object-controls/index.d.ts +1 -0
- package/dist/plugins/object-controls/index.js +44 -0
- package/dist/plugins/topology-drawer/TopologyDrawer.d.ts +97 -0
- package/dist/plugins/topology-drawer/index.cjs +1 -0
- package/dist/plugins/topology-drawer/index.d.ts +1 -0
- package/dist/plugins/topology-drawer/index.js +182 -0
- package/dist/src/interactions/InteractionEvent.d.ts +1 -1
- package/dist/src/interactions/InteractionManager.d.ts +2 -3
- package/dist/src/objects/Topology.d.ts +20 -1
- package/docs/api-animations.md +23 -23
- package/docs/api-effects.md +41 -41
- package/docs/api-interactions.md +47 -47
- package/docs/api-managers.md +24 -24
- package/docs/api-objects.md +85 -85
- package/docs/api-plugins.md +256 -113
- package/docs/api-viewer.md +45 -45
- package/docs/examples-guide.md +31 -31
- package/docs/getting-started.md +37 -36
- package/package.json +4 -3
package/docs/api-viewer.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Viewer API
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`Viewer` 是 `u-space` 的核心类,它将 WebGPU 渲染器、场景、相机、控制器以及各种管理器封装为一个易用的接口。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 构造函数
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
8
|
new Viewer(options: ViewerOptions)
|
|
@@ -10,37 +10,37 @@ new Viewer(options: ViewerOptions)
|
|
|
10
10
|
|
|
11
11
|
### `ViewerOptions`
|
|
12
12
|
|
|
13
|
-
|
|
|
14
|
-
| :---------------- | :------------------------- |
|
|
15
|
-
| `el` | `HTMLElement` |
|
|
16
|
-
| `rendererOptions` | `WebGPURendererParameters` |
|
|
17
|
-
|
|
18
|
-
##
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
|
23
|
-
| :------------------- | :------------------------------------------ |
|
|
24
|
-
| `el` | `HTMLElement` |
|
|
25
|
-
| `renderer` | `WebGPURenderer` |
|
|
26
|
-
| `scene` | `Scene` |
|
|
27
|
-
| `camera` | `PerspectiveCamera` \| `OrthographicCamera` |
|
|
28
|
-
| `controls` | `CameraControls` |
|
|
29
|
-
| `renderPipeline` | `RenderPipeline` |
|
|
30
|
-
| `timer` | `Timer` | Three.js `Timer`
|
|
31
|
-
| `roomEnvironment` | `RoomEnvironment` |
|
|
32
|
-
| `info` | `Info` |
|
|
33
|
-
| `viewerHelper` | `ViewerHelper` |
|
|
34
|
-
| `interactionManager` | `InteractionManager` |
|
|
35
|
-
| `objectManager` | `ObjectManager` |
|
|
36
|
-
| `frameloop` | `'always'` \| `'demand'` |
|
|
37
|
-
| `frameCount` | `number` |
|
|
38
|
-
|
|
39
|
-
##
|
|
13
|
+
| 属性 | 类型 | 必填 | 说明 |
|
|
14
|
+
| :---------------- | :------------------------- | :--- | :------------------------------------------------------------------------------------------------------------- |
|
|
15
|
+
| `el` | `HTMLElement` | 是 | WebGPURenderer 的 canvas 将被注入到此 DOM 元素中。 |
|
|
16
|
+
| `rendererOptions` | `WebGPURendererParameters` | 否 | 直接传递给底层 `WebGPURenderer` 的选项。默认使用 WebGPU 的高性能配置。 |
|
|
17
|
+
|
|
18
|
+
## 属性
|
|
19
|
+
|
|
20
|
+
`Viewer` 实例暴露了若干核心 Three.js 和 `u-space` 组件。
|
|
21
|
+
|
|
22
|
+
| 属性 | 类型 | 说明 |
|
|
23
|
+
| :------------------- | :------------------------------------------ | :---------------------------------------------------------------------------------------------------------------- |
|
|
24
|
+
| `el` | `HTMLElement` | 容器元素。 |
|
|
25
|
+
| `renderer` | `WebGPURenderer` | 底层 WebGPU 渲染器实例。 |
|
|
26
|
+
| `scene` | `Scene` | 主 Three.js 场景,背景默认为 `0x000000`。 |
|
|
27
|
+
| `camera` | `PerspectiveCamera` \| `OrthographicCamera` | 当前激活的相机。 |
|
|
28
|
+
| `controls` | `CameraControls` | 相机控制器(基于 `camera-controls` 库)。 |
|
|
29
|
+
| `renderPipeline` | `RenderPipeline` | 管理后处理通道和最终渲染调用。 |
|
|
30
|
+
| `timer` | `Timer` | Three.js `Timer` 实例,用于每帧精确的 delta time 跟踪。 |
|
|
31
|
+
| `roomEnvironment` | `RoomEnvironment` | 为场景提供默认的类室内 IBL 环境贴图。 |
|
|
32
|
+
| `info` | `Info` | 以叠加层的形式渲染渲染器诊断信息(绘制调用次数、三角面数量等)。 |
|
|
33
|
+
| `viewerHelper` | `ViewerHelper` | 提供实用辅助工具(如坐标轴、网格显示),用于开发/调试。 |
|
|
34
|
+
| `interactionManager` | `InteractionManager` | 管理对象的指针事件和射线检测。 |
|
|
35
|
+
| `objectManager` | `ObjectManager` | 用于按 ID 或名称注册和检索对象的工具。 |
|
|
36
|
+
| `frameloop` | `'always'` \| `'demand'` | 设置渲染模式。默认为 `'demand'`(仅在需要时渲染)。设置为 `'always'` 可开启持续渲染。 |
|
|
37
|
+
| `frameCount` | `number` | 待渲染帧的内部计数器,调用 `render()` 时递增。 |
|
|
38
|
+
|
|
39
|
+
## 方法
|
|
40
40
|
|
|
41
41
|
### `init()`
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
异步初始化渲染器。如果需要确保渲染器(如环境设置或插件)完全就绪,必须调用此方法。
|
|
44
44
|
|
|
45
45
|
```typescript
|
|
46
46
|
await viewer.init();
|
|
@@ -48,18 +48,18 @@ await viewer.init();
|
|
|
48
48
|
|
|
49
49
|
### `render(frame?: number)`
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
请求渲染一帧。在 `'demand'` 模式下,每当场景发生视觉变化时必须调用此方法来更新画布。`frame` 指定渲染的帧数(默认 `1`)。返回一个在帧渲染完成后 resolve 的 `Promise<void>`。
|
|
52
52
|
|
|
53
53
|
```typescript
|
|
54
54
|
viewer.render();
|
|
55
55
|
|
|
56
|
-
//
|
|
56
|
+
// 等待帧渲染完成
|
|
57
57
|
await viewer.render();
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
### `setCamera(camera: PerspectiveCamera | OrthographicCamera)`
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
为查看器设置自定义相机,并自动更新控制器和交互管理器以使用该相机。
|
|
63
63
|
|
|
64
64
|
```typescript
|
|
65
65
|
const customCamera = new PerspectiveCamera(75, width / height, 0.1, 1000);
|
|
@@ -68,7 +68,7 @@ viewer.setCamera(customCamera);
|
|
|
68
68
|
|
|
69
69
|
### `setCameraByType(type: 'perspective' | 'orthographic')`
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
便捷方法,在保持查看器上下文的同时切换相机类型。
|
|
72
72
|
|
|
73
73
|
```typescript
|
|
74
74
|
viewer.setCameraByType('orthographic');
|
|
@@ -76,7 +76,7 @@ viewer.setCameraByType('orthographic');
|
|
|
76
76
|
|
|
77
77
|
### `createScene()`
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
创建并返回一个黑色背景的新 `Scene`。由构造函数内部调用,也可用于重置/替换场景。
|
|
80
80
|
|
|
81
81
|
```typescript
|
|
82
82
|
viewer.scene = viewer.createScene();
|
|
@@ -84,7 +84,7 @@ viewer.scene = viewer.createScene();
|
|
|
84
84
|
|
|
85
85
|
### `createPerspectiveCamera()`
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
使用合理的默认值创建 `PerspectiveCamera`(视角 50°,近裁 `0.1`,远裁 `1e5`,位置在 `(5, 5, 5)`)。
|
|
88
88
|
|
|
89
89
|
```typescript
|
|
90
90
|
const camera = viewer.createPerspectiveCamera();
|
|
@@ -93,7 +93,7 @@ viewer.setCamera(camera);
|
|
|
93
93
|
|
|
94
94
|
### `createOrthographicCamera()`
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
创建与容器元素等大的 `OrthographicCamera`,近裁 `0.1`,远裁 `1e5`,位置在 `(5, 5, 5)`。
|
|
97
97
|
|
|
98
98
|
```typescript
|
|
99
99
|
const camera = viewer.createOrthographicCamera();
|
|
@@ -102,18 +102,18 @@ viewer.setCamera(camera);
|
|
|
102
102
|
|
|
103
103
|
### `dispose()`
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
清理查看器,从 DOM 中移除 canvas,移除事件监听,并释放渲染器和环境贴图,以防止内存泄漏。
|
|
106
106
|
|
|
107
107
|
```typescript
|
|
108
108
|
viewer.dispose();
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
##
|
|
111
|
+
## 事件
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
Viewer 继承自 `EventDispatcher`,会触发以下事件:
|
|
114
114
|
|
|
115
|
-
- `beforeControlsUpdate
|
|
116
|
-
- `afterControlsUpdate
|
|
117
|
-
- `beforeRender
|
|
118
|
-
- `afterRender
|
|
119
|
-
- `cameraChange
|
|
115
|
+
- `beforeControlsUpdate`:在 `CameraControls` 更新之前触发,提供 `{ time: number }`。
|
|
116
|
+
- `afterControlsUpdate`:在 `CameraControls` 更新之后触发,提供 `{ time: number }`。
|
|
117
|
+
- `beforeRender`:在 `renderer.render` 调用之前立即触发,提供 `{ time: number }`。
|
|
118
|
+
- `afterRender`:在 `renderer.render` 完成之后立即触发,提供 `{ time: number }`。
|
|
119
|
+
- `cameraChange`:调用 `setCamera` 时触发,提供 `{ camera: Camera }`。
|
package/docs/examples-guide.md
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 示例指南
|
|
2
2
|
|
|
3
|
-
`u-space`
|
|
3
|
+
`u-space` 的 `examples/` 目录中包含了大量演示引擎功能的示例。以下是几个关键示例及其所展示的系统特性。
|
|
4
4
|
|
|
5
|
-
## 1. `demo01.html
|
|
5
|
+
## 1. `demo01.html`:基础配置与交互
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
该示例演示了通过 WebGPU 渲染 3D 场景所需的最少配置,与 [快速上手](./getting-started.md) 指南中的内容一致。
|
|
8
8
|
|
|
9
|
-
###
|
|
9
|
+
### 核心要点:
|
|
10
10
|
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
11
|
+
- 将 `Viewer` 注入 DOM 元素。
|
|
12
|
+
- 使用 WebGPU `Color` 设置场景背景。
|
|
13
|
+
- 添加基础几何体(如 `BoxGeometry`)。
|
|
14
|
+
- 通过 `viewer.interactionManager.pointerMoveEventsEnabled` 启用全局交互。
|
|
15
|
+
- 像操作 DOM 元素一样,为 3D 网格原生绑定事件监听(`click`、`pointerenter`、`pointerleave`)。
|
|
16
16
|
|
|
17
|
-
## 2. `test_loader.html
|
|
17
|
+
## 2. `test_loader.html`:模型缓存机制
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
该示例深入解析了 `u-space` 的模型加载管线,阐明运行时缓存与浏览器持久化缓存之间的区别。
|
|
20
20
|
|
|
21
|
-
###
|
|
21
|
+
### 核心要点:
|
|
22
22
|
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
23
|
+
- 使用全局 `Model` 类通过 `Model.prototype.loadAsync()` 异步加载 `.glb` 文件。
|
|
24
|
+
- 理解 `cache: true`(将模型节点保留在内存中,可实现即时克隆/实例化)。
|
|
25
|
+
- 理解 `persistent: true`(使用 Service Worker / Cache Storage API 对实际网络请求数据进行持久化缓存)。
|
|
26
|
+
- 演示如何将这些异步加载的资源安全地注册到 `viewer.objectManager`。
|
|
27
|
+
- 提供通过 `Model.clearMemoryCache()` 和 `Model.clearPersistentCache()` 手动清除缓存的示例。
|
|
28
28
|
|
|
29
|
-
## 3. `load_tiles.html
|
|
29
|
+
## 3. `load_tiles.html`:GIS 与地球渲染
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
该示例使用外部对等依赖 `3d-tiles-renderer`,通过 `u-space` 插件安全封装后,渲染大规模 LOD GIS 地球。
|
|
32
32
|
|
|
33
|
-
###
|
|
33
|
+
### 核心要点:
|
|
34
34
|
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
35
|
+
- 动态实例化复杂插件(`ArcgisTilesRenderer`),并传入核心 viewer 引用。
|
|
36
|
+
- 由于瓦片是异步流式加载并持续更新视口的,需使用 `viewer.frameloop = 'always'`。
|
|
37
|
+
- 通过插件的 `invalidate(lon, lat, zoom)` 方法定位到指定的经纬度位置。
|
|
38
38
|
|
|
39
|
-
## 4. `test_umanager.html
|
|
39
|
+
## 4. `test_umanager.html`:场景组合与解析器
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
该综合示例融合了多种工具,展示如何构建完整的应用程序,而不仅仅是放置单个模型。
|
|
42
42
|
|
|
43
|
-
###
|
|
43
|
+
### 核心要点:
|
|
44
44
|
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
45
|
+
- 同时初始化多个插件(minimap、tracking、keyboard-controls),并通过 `.enable()` / `.disable()` 切换其状态。
|
|
46
|
+
- 流式传输结构化场景布局,解析场景描述(`SceneLoader`、`TopologiesLoader`)。
|
|
47
|
+
- 使用相机动画(`VisionsLoader` 和 `VisionsParser`)在场景中编排预定义的飞行路径。
|
|
48
|
+
- 获取复杂的节点材质,并自定义 WebGPU 专属的 TSL(Three Shading Language)节点,如 `TSLEffects.fluid()`。
|
package/docs/getting-started.md
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 快速上手 `u-space`
|
|
2
2
|
|
|
3
|
-
`u-space`
|
|
3
|
+
`u-space` 是一个基于 Three.js 的 WebGPU 3D 引擎。本指南将向你展示如何搭建一个基础的 `u-space` 应用。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 安装
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
确保已将 `@types/three` 和 `three` 安装为对等依赖。如果你计划使用交互功能,还需要安装 `camera-controls`。
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
pnpm install three camera-controls
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## 基础配置
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
以下是一个最小示例,展示如何初始化 `u-space` 的 `Viewer` 并向场景中添加一个可交互对象。
|
|
16
16
|
|
|
17
|
-
### 1. HTML
|
|
17
|
+
### 1. HTML 结构
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
创建一个容纳 3D 查看器的元素。
|
|
20
20
|
|
|
21
21
|
```html
|
|
22
22
|
<!DOCTYPE html>
|
|
23
|
-
<html lang="
|
|
23
|
+
<html lang="zh">
|
|
24
24
|
<head>
|
|
25
25
|
<meta charset="UTF-8" />
|
|
26
26
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
@@ -28,14 +28,14 @@ Create an element to house your 3D viewer.
|
|
|
28
28
|
</head>
|
|
29
29
|
<body style="margin: 0">
|
|
30
30
|
<div id="app" style="width: 100vw; height: 100vh"></div>
|
|
31
|
-
<!--
|
|
31
|
+
<!-- 脚本放这里 -->
|
|
32
32
|
</body>
|
|
33
33
|
</html>
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
### 2. Import Maps
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
由于 `u-space` 依赖 Three.js 的 WebGPU 特性,建议配置 Import Map 以解析 Three.js 的 WebGPU 构建版本。
|
|
39
39
|
|
|
40
40
|
```html
|
|
41
41
|
<script type="importmap">
|
|
@@ -51,9 +51,9 @@ Since `u-space` relies on Three.js WebGPU features, it's recommended to set up a
|
|
|
51
51
|
</script>
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
### 3.
|
|
54
|
+
### 3. 初始化 Viewer 并添加对象
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
初始化 `Viewer` 并向场景中添加一个基础 Three.js 对象。
|
|
57
57
|
|
|
58
58
|
```html
|
|
59
59
|
<script type="module">
|
|
@@ -62,48 +62,49 @@ Now, initialize the `Viewer` and add a basic Three.js object to the scene.
|
|
|
62
62
|
|
|
63
63
|
const app = document.getElementById('app');
|
|
64
64
|
|
|
65
|
-
//
|
|
65
|
+
// 初始化查看器
|
|
66
66
|
const viewer = new Viewer({
|
|
67
67
|
el: app,
|
|
68
|
-
rendererOptions: { forceWebGL: false }, //
|
|
68
|
+
rendererOptions: { forceWebGL: false }, // 优先使用 WebGPU
|
|
69
69
|
});
|
|
70
|
+
await viewer.init();
|
|
70
71
|
|
|
71
|
-
//
|
|
72
|
+
// 设置背景颜色
|
|
72
73
|
viewer.scene.background = new Color(0x666666);
|
|
73
74
|
|
|
74
|
-
//
|
|
75
|
+
// 添加网格辅助线
|
|
75
76
|
const gridHelper = new GridHelper(10, 10);
|
|
76
77
|
viewer.scene.add(gridHelper);
|
|
77
78
|
|
|
78
|
-
//
|
|
79
|
+
// 添加一个立方体
|
|
79
80
|
const geometry = new BoxGeometry(1, 1, 1);
|
|
80
81
|
const material = new MeshBasicMaterial({ color: 0xff0000 });
|
|
81
82
|
const box = new Mesh(geometry, material);
|
|
82
83
|
box.position.set(0, 0.5, 0);
|
|
83
84
|
viewer.scene.add(box);
|
|
84
85
|
|
|
85
|
-
//
|
|
86
|
+
// 渲染场景
|
|
86
87
|
viewer.render();
|
|
87
88
|
</script>
|
|
88
89
|
```
|
|
89
90
|
|
|
90
|
-
### 4.
|
|
91
|
+
### 4. 启用交互
|
|
91
92
|
|
|
92
|
-
`u-space`
|
|
93
|
+
`u-space` 内置了 `InteractionManager`,可以轻松为 3D 对象添加事件监听。
|
|
93
94
|
|
|
94
95
|
```javascript
|
|
95
|
-
//
|
|
96
|
+
// 启用指针移动事件
|
|
96
97
|
viewer.interactionManager.targetObjects = [];
|
|
97
98
|
viewer.interactionManager.pointerMoveEventsEnabled = true;
|
|
98
99
|
|
|
99
|
-
//
|
|
100
|
+
// 添加点击事件
|
|
100
101
|
box.addEventListener('click', (e) => {
|
|
101
|
-
console.log('
|
|
102
|
+
console.log('点击位置:', e.event.intersect.point);
|
|
102
103
|
material.color.set(Math.random() * 0xffffff);
|
|
103
|
-
viewer.render(); //
|
|
104
|
+
viewer.render(); // 请求新一帧渲染
|
|
104
105
|
});
|
|
105
106
|
|
|
106
|
-
//
|
|
107
|
+
// 添加悬停事件
|
|
107
108
|
box.addEventListener('pointerenter', (e) => {
|
|
108
109
|
document.body.style.cursor = 'pointer';
|
|
109
110
|
material.color.set(0x00ff00);
|
|
@@ -117,15 +118,15 @@ box.addEventListener('pointerleave', (e) => {
|
|
|
117
118
|
});
|
|
118
119
|
```
|
|
119
120
|
|
|
120
|
-
|
|
121
|
+
这样就完成了!你现在拥有一个基础的 `u-space` 应用。
|
|
121
122
|
|
|
122
|
-
##
|
|
123
|
+
## 下一步
|
|
123
124
|
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
-
|
|
125
|
+
- 深入了解 [Viewer API](./api-viewer.md)
|
|
126
|
+
- 探索如何 [加载模型与使用对象](./api-objects.md)
|
|
127
|
+
- 理解 [交互系统](./api-interactions.md)
|
|
128
|
+
- 使用 [Managers API](./api-managers.md) 注册和检索对象
|
|
129
|
+
- 通过 [Plugins API](./api-plugins.md) 添加瓦片地图、小地图、键盘控制等功能
|
|
130
|
+
- 使用 [Animations API](./api-animations.md) 为属性添加动画
|
|
131
|
+
- 使用 [Effects API](./api-effects.md) 应用视觉特效
|
|
132
|
+
- 浏览 [示例指南](./examples-guide.md)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "u-space",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "dist/src/index.d.ts",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"docs:dev": "vitepress dev docs",
|
|
29
29
|
"docs:build": "vitepress build docs",
|
|
30
30
|
"docs:preview": "vitepress preview docs",
|
|
31
|
-
"docs:deploy": "pnpm docs:build && vercel --prod"
|
|
31
|
+
"docs:deploy": "pnpm docs:build && vercel --prod",
|
|
32
|
+
"release": "npm publish --access=public"
|
|
32
33
|
},
|
|
33
34
|
"files": [
|
|
34
35
|
"dist",
|
|
@@ -63,4 +64,4 @@
|
|
|
63
64
|
"camera-controls": "^3.1.2",
|
|
64
65
|
"three": "^0.183.1"
|
|
65
66
|
}
|
|
66
|
-
}
|
|
67
|
+
}
|