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.
@@ -1,8 +1,8 @@
1
1
  # Viewer API
2
2
 
3
- The `Viewer` is the core class of `u-space`. It encapsulates the WebGPU Renderer, Scene, Camera, Controls, and various managers into an easy-to-use interface.
3
+ `Viewer` 是 `u-space` 的核心类,它将 WebGPU 渲染器、场景、相机、控制器以及各种管理器封装为一个易用的接口。
4
4
 
5
- ## Constructor
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
- | Property | Type | Required | Description |
14
- | :---------------- | :------------------------- | :------- | :-------------------------------------------------------------------------------------------------------------------- |
15
- | `el` | `HTMLElement` | Yes | The DOM element where the WebGPURenderer's canvas will be injected. |
16
- | `rendererOptions` | `WebGPURendererParameters` | No | Options passed directly to the underlying `WebGPURenderer`. By default, it uses high-performance settings for WebGPU. |
17
-
18
- ## Properties
19
-
20
- The `Viewer` instance exposes several core Three.js and `u-space` components.
21
-
22
- | Property | Type | Description |
23
- | :------------------- | :------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------- |
24
- | `el` | `HTMLElement` | The container element. |
25
- | `renderer` | `WebGPURenderer` | The underlying WebGPU renderer instance. |
26
- | `scene` | `Scene` | The main Three.js scene. Background defaults to `0x000000`. |
27
- | `camera` | `PerspectiveCamera` \| `OrthographicCamera` | The active camera. |
28
- | `controls` | `CameraControls` | Camera controls (powered by `camera-controls` library). |
29
- | `renderPipeline` | `RenderPipeline` | Manages post-processing passes and the final render call. |
30
- | `timer` | `Timer` | Three.js `Timer` instance for accurate delta time tracking each frame. |
31
- | `roomEnvironment` | `RoomEnvironment` | Provides a default room-like IBL environment map for the scene. |
32
- | `info` | `Info` | Renders renderer diagnostics (draw calls, triangles, etc.) as an overlay. |
33
- | `viewerHelper` | `ViewerHelper` | Exposes utility helpers (e.g., axes, grid display) for development/debugging. |
34
- | `interactionManager` | `InteractionManager` | Manages pointer events and raycasting on objects. |
35
- | `objectManager` | `ObjectManager` | A utility for registering and retrieving objects by ID or name. |
36
- | `frameloop` | `'always'` \| `'demand'` | Sets the rendering mode. Default is `'demand'` (render only when required). Set to `'always'` for continuous rendering. |
37
- | `frameCount` | `number` | Internal counter of pending render frames. Incremented by `render()`. |
38
-
39
- ## Methods
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
- Initializes the renderer asynchronously. This must be called if you need to ensure the renderer (like setting up environments or plugins) is fully ready.
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
- Requests a render frame. In `'demand'` frameloop mode, this must be called whenever the scene changes visually to update the canvas. `frame` specifies how many frames to render (default `1`). Returns a `Promise<void>` that resolves after the frame is rendered.
51
+ 请求渲染一帧。在 `'demand'` 模式下,每当场景发生视觉变化时必须调用此方法来更新画布。`frame` 指定渲染的帧数(默认 `1`)。返回一个在帧渲染完成后 resolve 的 `Promise<void>`。
52
52
 
53
53
  ```typescript
54
54
  viewer.render();
55
55
 
56
- // Await the rendered frame
56
+ // 等待帧渲染完成
57
57
  await viewer.render();
58
58
  ```
59
59
 
60
60
  ### `setCamera(camera: PerspectiveCamera | OrthographicCamera)`
61
61
 
62
- Sets a custom camera for the viewer and automatically updates the controls and interaction manager to use it.
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
- Convenience method to switch the camera type while maintaining the viewer context.
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
- Creates and returns a new `Scene` with a black background. Called internally by the constructor but can be used to reset/replace the scene.
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
- Creates a `PerspectiveCamera` with sensible defaults (50° fov, near `0.1`, far `1e5`, positioned at `(5, 5, 5)`).
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
- Creates an `OrthographicCamera` sized to the container element, near `0.1`, far `1e5`, positioned at `(5, 5, 5)`.
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
- Cleans up the viewer, removing the canvas from the DOM, removing event listeners, and disposing of the renderer and environment maps to prevent memory leaks.
105
+ 清理查看器,从 DOM 中移除 canvas,移除事件监听,并释放渲染器和环境贴图,以防止内存泄漏。
106
106
 
107
107
  ```typescript
108
108
  viewer.dispose();
109
109
  ```
110
110
 
111
- ## Events
111
+ ## 事件
112
112
 
113
- The viewer extends `EventDispatcher` and fires the following events:
113
+ Viewer 继承自 `EventDispatcher`,会触发以下事件:
114
114
 
115
- - `beforeControlsUpdate`: Fired before `CameraControls` update. Emitter provides `{ time: number }`.
116
- - `afterControlsUpdate`: Fired after `CameraControls` update. Emitter provides `{ time: number }`.
117
- - `beforeRender`: Fired immediately before `renderer.render` is called. Emitter provides `{ time: number }`.
118
- - `afterRender`: Fired immediately after `renderer.render` completes. Emitter provides `{ time: number }`.
119
- - `cameraChange`: Fired when `setCamera` is called. Emitter provides `{ camera: Camera }`.
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 }`。
@@ -1,48 +1,48 @@
1
- # Examples Guide
1
+ # 示例指南
2
2
 
3
- `u-space` contains an extensive `examples/` directory that demonstrates the engine's capabilities. Below are a few key examples and what they teach you about the system.
3
+ `u-space` 的 `examples/` 目录中包含了大量演示引擎功能的示例。以下是几个关键示例及其所展示的系统特性。
4
4
 
5
- ## 1. `demo01.html`: Basic Setup & Interactivity
5
+ ## 1. `demo01.html`:基础配置与交互
6
6
 
7
- This example demonstrates the absolute bare-minimum setup required to get a 3D scene rendering via WebGPU, as covered in the [Getting Started](./getting-started.md) guide.
7
+ 该示例演示了通过 WebGPU 渲染 3D 场景所需的最少配置,与 [快速上手](./getting-started.md) 指南中的内容一致。
8
8
 
9
- ### Key Takeaways:
9
+ ### 核心要点:
10
10
 
11
- - Injecting the `Viewer` into a DOM element.
12
- - Setting the scene background using WebGPU `Color`.
13
- - Adding primitive geometries (like `BoxGeometry`).
14
- - Enabling global interaction via `viewer.interactionManager.pointerMoveEventsEnabled`.
15
- - Attaching DOM-style event listeners (`click`, `pointerenter`, `pointerleave`) natively to 3D meshes.
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`: Model Caching Mechanics
17
+ ## 2. `test_loader.html`:模型缓存机制
18
18
 
19
- This example dives deep into the `u-space` Model Loader pipeline and explains the differences between runtime cache and browser persistent cache.
19
+ 该示例深入解析了 `u-space` 的模型加载管线,阐明运行时缓存与浏览器持久化缓存之间的区别。
20
20
 
21
- ### Key Takeaways:
21
+ ### 核心要点:
22
22
 
23
- - Utilizing the global `Model` class to load `.glb` files asynchronously via `Model.prototype.loadAsync()`.
24
- - Demystifying `cache: true` (which retains the model node in RAM for instant cloning/instantiation).
25
- - Demystifying `persistent: true` (which uses the Service Worker / Cache Storage API to cache the actual network request bytes).
26
- - Demonstrates how to register these loaded asynchronous assets into the `viewer.objectManager` securely.
27
- - Provides examples on programmatically flushing the caches using `Model.clearMemoryCache()` and `Model.clearPersistentCache()`.
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`: GIS & Earth Rendering
29
+ ## 3. `load_tiles.html`:GIS 与地球渲染
30
30
 
31
- This example uses the external `3d-tiles-renderer` peer dependency securely wrapped by a `u-space` plugin to render massive level-of-detail GIS globes.
31
+ 该示例使用外部对等依赖 `3d-tiles-renderer`,通过 `u-space` 插件安全封装后,渲染大规模 LOD GIS 地球。
32
32
 
33
- ### Key Takeaways:
33
+ ### 核心要点:
34
34
 
35
- - Instantiating complex plugins (`ArcgisTilesRenderer`) dynamically passing the core viewer reference.
36
- - Using `viewer.frameloop = 'always'` since tiles stream asynchronously and continuously update the viewport.
37
- - Fetching specific Longitude and Latitude positions using the plugin's `invalidate(lon, lat, zoom)` method.
35
+ - 动态实例化复杂插件(`ArcgisTilesRenderer`),并传入核心 viewer 引用。
36
+ - 由于瓦片是异步流式加载并持续更新视口的,需使用 `viewer.frameloop = 'always'`。
37
+ - 通过插件的 `invalidate(lon, lat, zoom)` 方法定位到指定的经纬度位置。
38
38
 
39
- ## 4. `test_umanager.html`: Scene Compositions & Parsers
39
+ ## 4. `test_umanager.html`:场景组合与解析器
40
40
 
41
- This robust example combines multiple tools, illustrating how to build complete applications instead of just placing single models.
41
+ 该综合示例融合了多种工具,展示如何构建完整的应用程序,而不仅仅是放置单个模型。
42
42
 
43
- ### Key Takeaways:
43
+ ### 核心要点:
44
44
 
45
- - Initializing multiple Plugins concurrently (minimap, tracking, keyboard-controls) and toggling their state via `.enable()` / `.disable()`.
46
- - Streaming structured scene layouts, parsing scene descriptions (`SceneLoader`, `TopologiesLoader`).
47
- - Working with camera animations (`VisionsLoader` and `VisionsParser`) to choreograph pre-defined flight paths securely within the scene.
48
- - Retrieving complex Node materials and customizing WebGPU specific TSL (Three Shading Language) nodes like `TSLEffects.fluid()`.
45
+ - 同时初始化多个插件(minimap、tracking、keyboard-controls),并通过 `.enable()` / `.disable()` 切换其状态。
46
+ - 流式传输结构化场景布局,解析场景描述(`SceneLoader`、`TopologiesLoader`)。
47
+ - 使用相机动画(`VisionsLoader` 和 `VisionsParser`)在场景中编排预定义的飞行路径。
48
+ - 获取复杂的节点材质,并自定义 WebGPU 专属的 TSL(Three Shading Language)节点,如 `TSLEffects.fluid()`。
@@ -1,26 +1,26 @@
1
- # Getting Started with `u-space`
1
+ # 快速上手 `u-space`
2
2
 
3
- `u-space` is a WebGPU-ready 3D engine built on top of Three.js. This guide will show you how to set up a basic `u-space` application.
3
+ `u-space` 是一个基于 Three.js 的 WebGPU 3D 引擎。本指南将向你展示如何搭建一个基础的 `u-space` 应用。
4
4
 
5
- ## Installation
5
+ ## 安装
6
6
 
7
- Ensure you have `@types/three` and `three` installed as peer dependencies. If you plan to use interactions, you might also need `camera-controls`.
7
+ 确保已将 `@types/three` 和 `three` 安装为对等依赖。如果你计划使用交互功能,还需要安装 `camera-controls`。
8
8
 
9
9
  ```bash
10
10
  pnpm install three camera-controls
11
11
  ```
12
12
 
13
- ## Basic Setup
13
+ ## 基础配置
14
14
 
15
- Here is a minimal example of setting up a `u-space` `Viewer` and adding an interactive object to the scene.
15
+ 以下是一个最小示例,展示如何初始化 `u-space` 的 `Viewer` 并向场景中添加一个可交互对象。
16
16
 
17
- ### 1. HTML Structure
17
+ ### 1. HTML 结构
18
18
 
19
- Create an element to house your 3D viewer.
19
+ 创建一个容纳 3D 查看器的元素。
20
20
 
21
21
  ```html
22
22
  <!DOCTYPE html>
23
- <html lang="en">
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
- <!-- Script goes here -->
31
+ <!-- 脚本放这里 -->
32
32
  </body>
33
33
  </html>
34
34
  ```
35
35
 
36
36
  ### 2. Import Maps
37
37
 
38
- Since `u-space` relies on Three.js WebGPU features, it's recommended to set up an import map to resolve the WebGPU build of Three.js.
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. Initialize Viewer & Add Objects
54
+ ### 3. 初始化 Viewer 并添加对象
55
55
 
56
- Now, initialize the `Viewer` and add a basic Three.js object to the scene.
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
- // Initialize the viewer
65
+ // 初始化查看器
66
66
  const viewer = new Viewer({
67
67
  el: app,
68
- rendererOptions: { forceWebGL: false }, // Prefer WebGPU
68
+ rendererOptions: { forceWebGL: false }, // 优先使用 WebGPU
69
69
  });
70
+ await viewer.init();
70
71
 
71
- // Set background color
72
+ // 设置背景颜色
72
73
  viewer.scene.background = new Color(0x666666);
73
74
 
74
- // Add a grid
75
+ // 添加网格辅助线
75
76
  const gridHelper = new GridHelper(10, 10);
76
77
  viewer.scene.add(gridHelper);
77
78
 
78
- // Add a Box
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
- // Render the scene
86
+ // 渲染场景
86
87
  viewer.render();
87
88
  </script>
88
89
  ```
89
90
 
90
- ### 4. Enable Interactions
91
+ ### 4. 启用交互
91
92
 
92
- `u-space` has a built-in `InteractionManager`. You can easily add event listeners to your 3D objects.
93
+ `u-space` 内置了 `InteractionManager`,可以轻松为 3D 对象添加事件监听。
93
94
 
94
95
  ```javascript
95
- // Enable pointer move events
96
+ // 启用指针移动事件
96
97
  viewer.interactionManager.targetObjects = [];
97
98
  viewer.interactionManager.pointerMoveEventsEnabled = true;
98
99
 
99
- // Add click event
100
+ // 添加点击事件
100
101
  box.addEventListener('click', (e) => {
101
- console.log('Clicked at:', e.event.intersect.point);
102
+ console.log('点击位置:', e.event.intersect.point);
102
103
  material.color.set(Math.random() * 0xffffff);
103
- viewer.render(); // Request a new frame
104
+ viewer.render(); // 请求新一帧渲染
104
105
  });
105
106
 
106
- // Add hover events
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
- And that's it! You now have a basic `u-space` application up and running.
121
+ 这样就完成了!你现在拥有一个基础的 `u-space` 应用。
121
122
 
122
- ## Next Steps
123
+ ## 下一步
123
124
 
124
- - Learn more about the [Viewer API](./api-viewer.md)
125
- - Explore how to [load Models and work with Objects](./api-objects.md)
126
- - Understand the [Interaction System](./api-interactions.md)
127
- - Register and retrieve objects with the [Managers API](./api-managers.md)
128
- - Add tile maps, minimap, keyboard controls and more with the [Plugins API](./api-plugins.md)
129
- - Animate properties with the [Animations API](./api-animations.md)
130
- - Apply visual effects with the [Effects API](./api-effects.md)
131
- - Browse the [Examples Guide](./examples-guide.md)
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.0-alpha.2",
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
+ }