@ifc-lite/renderer 1.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/dist/scene.js ADDED
@@ -0,0 +1,46 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ export class Scene {
5
+ meshes = [];
6
+ /**
7
+ * Add mesh to scene
8
+ */
9
+ addMesh(mesh) {
10
+ this.meshes.push(mesh);
11
+ }
12
+ /**
13
+ * Get all meshes
14
+ */
15
+ getMeshes() {
16
+ return this.meshes;
17
+ }
18
+ /**
19
+ * Clear scene
20
+ */
21
+ clear() {
22
+ for (const mesh of this.meshes) {
23
+ mesh.vertexBuffer.destroy();
24
+ mesh.indexBuffer.destroy();
25
+ // Destroy per-mesh uniform buffer if it exists
26
+ if (mesh.uniformBuffer) {
27
+ mesh.uniformBuffer.destroy();
28
+ }
29
+ }
30
+ this.meshes = [];
31
+ }
32
+ /**
33
+ * Calculate bounding box
34
+ */
35
+ getBounds() {
36
+ if (this.meshes.length === 0)
37
+ return null;
38
+ // For MVP, return a simple bounding box
39
+ // In production, this would compute from actual vertex data
40
+ return {
41
+ min: { x: -10, y: -10, z: -10 },
42
+ max: { x: 10, y: 10, z: 10 },
43
+ };
44
+ }
45
+ }
46
+ //# sourceMappingURL=scene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene.js","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAQ/D,MAAM,OAAO,KAAK;IACR,MAAM,GAAW,EAAE,CAAC;IAE5B;;OAEG;IACH,OAAO,CAAC,IAAU;QAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC3B,+CAA+C;YAC/C,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE1C,wCAAwC;QACxC,4DAA4D;QAC5D,OAAO;YACL,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/B,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;SAC7B,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Section plane renderer - renders a visible plane at the section cut location
3
+ */
4
+ export interface SectionPlaneRenderOptions {
5
+ axis: 'x' | 'y' | 'z';
6
+ position: number;
7
+ bounds: {
8
+ min: {
9
+ x: number;
10
+ y: number;
11
+ z: number;
12
+ };
13
+ max: {
14
+ x: number;
15
+ y: number;
16
+ z: number;
17
+ };
18
+ };
19
+ viewProj: Float32Array;
20
+ }
21
+ export declare class SectionPlaneRenderer {
22
+ private device;
23
+ private pipeline;
24
+ private vertexBuffer;
25
+ private uniformBuffer;
26
+ private bindGroup;
27
+ private format;
28
+ private initialized;
29
+ constructor(device: GPUDevice, format: GPUTextureFormat);
30
+ private init;
31
+ render(encoder: GPUCommandEncoder, textureView: GPUTextureView, depthView: GPUTextureView, options: SectionPlaneRenderOptions): void;
32
+ private calculatePlaneVertices;
33
+ }
34
+ //# sourceMappingURL=section-plane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-plane.d.ts","sourceRoot":"","sources":["../src/section-plane.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1C,CAAC;IACF,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB;IAKvD,OAAO,CAAC,IAAI;IAyHZ,MAAM,CACJ,OAAO,EAAE,iBAAiB,EAC1B,WAAW,EAAE,cAAc,EAC3B,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,yBAAyB,GACjC,IAAI;IA4CP,OAAO,CAAC,sBAAsB;CAsE/B"}
@@ -0,0 +1,232 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ export class SectionPlaneRenderer {
5
+ device;
6
+ pipeline = null;
7
+ vertexBuffer = null;
8
+ uniformBuffer = null;
9
+ bindGroup = null;
10
+ format;
11
+ initialized = false;
12
+ constructor(device, format) {
13
+ this.device = device;
14
+ this.format = format;
15
+ }
16
+ init() {
17
+ if (this.initialized)
18
+ return;
19
+ // Create shader for section plane rendering
20
+ const shaderModule = this.device.createShaderModule({
21
+ code: `
22
+ struct Uniforms {
23
+ viewProj: mat4x4<f32>,
24
+ planeColor: vec4<f32>,
25
+ }
26
+ @binding(0) @group(0) var<uniform> uniforms: Uniforms;
27
+
28
+ struct VertexOutput {
29
+ @builtin(position) position: vec4<f32>,
30
+ @location(0) uv: vec2<f32>,
31
+ }
32
+
33
+ @vertex
34
+ fn vs_main(@location(0) position: vec3<f32>, @location(1) uv: vec2<f32>) -> VertexOutput {
35
+ var output: VertexOutput;
36
+ output.position = uniforms.viewProj * vec4<f32>(position, 1.0);
37
+ output.uv = uv;
38
+ return output;
39
+ }
40
+
41
+ @fragment
42
+ fn fs_main(input: VertexOutput) -> @location(0) vec4<f32> {
43
+ // Create a grid pattern on the plane
44
+ let gridSize = 0.05;
45
+ let lineWidth = 0.02;
46
+
47
+ let gridX = abs(fract(input.uv.x / gridSize + 0.5) - 0.5);
48
+ let gridY = abs(fract(input.uv.y / gridSize + 0.5) - 0.5);
49
+
50
+ let gridLine = min(gridX, gridY);
51
+ let isGridLine = gridLine < lineWidth;
52
+
53
+ // Edge fade for softer appearance
54
+ let edgeFade = smoothstep(0.0, 0.1, min(input.uv.x, min(input.uv.y, min(1.0 - input.uv.x, 1.0 - input.uv.y))));
55
+
56
+ var color = uniforms.planeColor;
57
+ if (isGridLine) {
58
+ color = vec4<f32>(color.rgb * 1.3, color.a * 1.5);
59
+ }
60
+
61
+ color.a *= edgeFade;
62
+
63
+ return color;
64
+ }
65
+ `,
66
+ });
67
+ // Create render pipeline with alpha blending
68
+ this.pipeline = this.device.createRenderPipeline({
69
+ layout: 'auto',
70
+ vertex: {
71
+ module: shaderModule,
72
+ entryPoint: 'vs_main',
73
+ buffers: [
74
+ {
75
+ arrayStride: 20, // 3 position + 2 uv = 5 floats
76
+ attributes: [
77
+ { shaderLocation: 0, offset: 0, format: 'float32x3' },
78
+ { shaderLocation: 1, offset: 12, format: 'float32x2' },
79
+ ],
80
+ },
81
+ ],
82
+ },
83
+ fragment: {
84
+ module: shaderModule,
85
+ entryPoint: 'fs_main',
86
+ targets: [{
87
+ format: this.format,
88
+ blend: {
89
+ color: {
90
+ srcFactor: 'src-alpha',
91
+ dstFactor: 'one-minus-src-alpha',
92
+ operation: 'add',
93
+ },
94
+ alpha: {
95
+ srcFactor: 'one',
96
+ dstFactor: 'one-minus-src-alpha',
97
+ operation: 'add',
98
+ },
99
+ },
100
+ }],
101
+ },
102
+ primitive: {
103
+ topology: 'triangle-list',
104
+ cullMode: 'none',
105
+ },
106
+ depthStencil: {
107
+ format: 'depth24plus',
108
+ depthWriteEnabled: false, // Don't write to depth buffer (transparent)
109
+ depthCompare: 'less-equal',
110
+ },
111
+ });
112
+ // Create vertex buffer (6 vertices for 2 triangles)
113
+ this.vertexBuffer = this.device.createBuffer({
114
+ size: 6 * 5 * 4, // 6 vertices * 5 floats * 4 bytes
115
+ usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
116
+ });
117
+ // Create uniform buffer
118
+ this.uniformBuffer = this.device.createBuffer({
119
+ size: 80, // mat4x4 (64) + vec4 (16) = 80 bytes
120
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
121
+ });
122
+ // Create bind group
123
+ this.bindGroup = this.device.createBindGroup({
124
+ layout: this.pipeline.getBindGroupLayout(0),
125
+ entries: [
126
+ { binding: 0, resource: { buffer: this.uniformBuffer } },
127
+ ],
128
+ });
129
+ this.initialized = true;
130
+ }
131
+ render(encoder, textureView, depthView, options) {
132
+ this.init();
133
+ if (!this.pipeline || !this.vertexBuffer || !this.uniformBuffer || !this.bindGroup) {
134
+ return;
135
+ }
136
+ const { axis, position, bounds, viewProj } = options;
137
+ // Calculate plane vertices based on axis and bounds
138
+ const vertices = this.calculatePlaneVertices(axis, position, bounds);
139
+ this.device.queue.writeBuffer(this.vertexBuffer, 0, vertices);
140
+ // Update uniforms
141
+ const uniforms = new Float32Array(20);
142
+ uniforms.set(viewProj, 0);
143
+ // Plane color - semi-transparent blue/cyan
144
+ uniforms[16] = 0.2; // R
145
+ uniforms[17] = 0.6; // G
146
+ uniforms[18] = 0.9; // B
147
+ uniforms[19] = 0.3; // A (transparency)
148
+ this.device.queue.writeBuffer(this.uniformBuffer, 0, uniforms);
149
+ // Render the section plane
150
+ const pass = encoder.beginRenderPass({
151
+ colorAttachments: [{
152
+ view: textureView,
153
+ loadOp: 'load', // Keep existing content
154
+ storeOp: 'store',
155
+ }],
156
+ depthStencilAttachment: {
157
+ view: depthView,
158
+ depthLoadOp: 'load',
159
+ depthStoreOp: 'store',
160
+ },
161
+ });
162
+ pass.setPipeline(this.pipeline);
163
+ pass.setBindGroup(0, this.bindGroup);
164
+ pass.setVertexBuffer(0, this.vertexBuffer);
165
+ pass.draw(6); // 2 triangles
166
+ pass.end();
167
+ }
168
+ calculatePlaneVertices(axis, position, bounds) {
169
+ const { min, max } = bounds;
170
+ // Add some padding to make the plane slightly larger than the model
171
+ const padding = 0.1;
172
+ const sizeX = (max.x - min.x) * (1 + padding);
173
+ const sizeY = (max.y - min.y) * (1 + padding);
174
+ const sizeZ = (max.z - min.z) * (1 + padding);
175
+ const centerX = (min.x + max.x) / 2;
176
+ const centerY = (min.y + max.y) / 2;
177
+ const centerZ = (min.z + max.z) / 2;
178
+ // Calculate the plane position along the axis
179
+ const t = position / 100;
180
+ let vertices = [];
181
+ if (axis === 'x') {
182
+ const x = min.x + t * (max.x - min.x);
183
+ const halfY = sizeY / 2;
184
+ const halfZ = sizeZ / 2;
185
+ // Quad facing X axis (vertices in YZ plane)
186
+ vertices = [
187
+ // Triangle 1
188
+ x, centerY - halfY, centerZ - halfZ, 0, 0,
189
+ x, centerY + halfY, centerZ - halfZ, 1, 0,
190
+ x, centerY + halfY, centerZ + halfZ, 1, 1,
191
+ // Triangle 2
192
+ x, centerY - halfY, centerZ - halfZ, 0, 0,
193
+ x, centerY + halfY, centerZ + halfZ, 1, 1,
194
+ x, centerY - halfY, centerZ + halfZ, 0, 1,
195
+ ];
196
+ }
197
+ else if (axis === 'y') {
198
+ const y = min.y + t * (max.y - min.y);
199
+ const halfX = sizeX / 2;
200
+ const halfZ = sizeZ / 2;
201
+ // Quad facing Y axis (vertices in XZ plane)
202
+ vertices = [
203
+ // Triangle 1
204
+ centerX - halfX, y, centerZ - halfZ, 0, 0,
205
+ centerX + halfX, y, centerZ - halfZ, 1, 0,
206
+ centerX + halfX, y, centerZ + halfZ, 1, 1,
207
+ // Triangle 2
208
+ centerX - halfX, y, centerZ - halfZ, 0, 0,
209
+ centerX + halfX, y, centerZ + halfZ, 1, 1,
210
+ centerX - halfX, y, centerZ + halfZ, 0, 1,
211
+ ];
212
+ }
213
+ else {
214
+ const z = min.z + t * (max.z - min.z);
215
+ const halfX = sizeX / 2;
216
+ const halfY = sizeY / 2;
217
+ // Quad facing Z axis (vertices in XY plane)
218
+ vertices = [
219
+ // Triangle 1
220
+ centerX - halfX, centerY - halfY, z, 0, 0,
221
+ centerX + halfX, centerY - halfY, z, 1, 0,
222
+ centerX + halfX, centerY + halfY, z, 1, 1,
223
+ // Triangle 2
224
+ centerX - halfX, centerY - halfY, z, 0, 0,
225
+ centerX + halfX, centerY + halfY, z, 1, 1,
226
+ centerX - halfX, centerY + halfY, z, 0, 1,
227
+ ];
228
+ }
229
+ return new Float32Array(vertices);
230
+ }
231
+ }
232
+ //# sourceMappingURL=section-plane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-plane.js","sourceRoot":"","sources":["../src/section-plane.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Renderer types for IFC-Lite
3
+ */
4
+ export interface Vec3 {
5
+ x: number;
6
+ y: number;
7
+ z: number;
8
+ }
9
+ export interface Mat4 {
10
+ m: Float32Array;
11
+ }
12
+ export interface Camera {
13
+ position: Vec3;
14
+ target: Vec3;
15
+ up: Vec3;
16
+ fov: number;
17
+ aspect: number;
18
+ near: number;
19
+ far: number;
20
+ }
21
+ export interface Material {
22
+ baseColor: [number, number, number, number];
23
+ metallic: number;
24
+ roughness: number;
25
+ transparency?: number;
26
+ }
27
+ export interface Mesh {
28
+ expressId: number;
29
+ vertexBuffer: GPUBuffer;
30
+ indexBuffer: GPUBuffer;
31
+ indexCount: number;
32
+ transform: Mat4;
33
+ color: [number, number, number, number];
34
+ material?: Material;
35
+ uniformBuffer?: GPUBuffer;
36
+ bindGroup?: GPUBindGroup;
37
+ bounds?: {
38
+ min: [number, number, number];
39
+ max: [number, number, number];
40
+ };
41
+ }
42
+ export interface SectionPlane {
43
+ axis: 'x' | 'y' | 'z';
44
+ position: number;
45
+ enabled: boolean;
46
+ }
47
+ export interface RenderOptions {
48
+ clearColor?: [number, number, number, number];
49
+ enableDepthTest?: boolean;
50
+ enableFrustumCulling?: boolean;
51
+ spatialIndex?: import('@ifc-lite/spatial').SpatialIndex;
52
+ hiddenIds?: Set<number>;
53
+ isolatedIds?: Set<number> | null;
54
+ selectedId?: number | null;
55
+ selectedIds?: Set<number>;
56
+ sectionPlane?: SectionPlane;
57
+ }
58
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,YAAY,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,EAAE,EAAE,IAAI,CAAC;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,YAAY,CAAC;IAEzB,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CAC3E;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,mBAAmB,EAAE,YAAY,CAAC;IAExD,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@ifc-lite/renderer",
3
+ "version": "1.0.0",
4
+ "description": "WebGPU renderer for IFC-Lite",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "dependencies": {
15
+ "@ifc-lite/spatial": "1.0.0"
16
+ },
17
+ "devDependencies": {
18
+ "typescript": "^5.3.0"
19
+ },
20
+ "license": "MPL-2.0",
21
+ "author": "Louis True",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/louistrue/ifc-lite.git",
25
+ "directory": "packages/renderer"
26
+ },
27
+ "homepage": "https://louistrue.github.io/ifc-lite/",
28
+ "bugs": "https://github.com/louistrue/ifc-lite/issues",
29
+ "keywords": [
30
+ "ifc",
31
+ "bim",
32
+ "renderer",
33
+ "webgpu",
34
+ "aec"
35
+ ],
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "files": [
40
+ "dist",
41
+ "README.md"
42
+ ],
43
+ "scripts": {
44
+ "build": "tsc",
45
+ "dev": "tsc --watch"
46
+ }
47
+ }