@pascal-app/viewer 0.6.0 → 0.8.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/components/error-boundary.d.ts +7 -3
- package/dist/components/error-boundary.d.ts.map +1 -1
- package/dist/components/error-boundary.js +3 -1
- package/dist/components/renderers/ceiling/ceiling-renderer.d.ts.map +1 -1
- package/dist/components/renderers/ceiling/ceiling-renderer.js +19 -3
- package/dist/components/renderers/column/column-renderer.d.ts +5 -0
- package/dist/components/renderers/column/column-renderer.d.ts.map +1 -0
- package/dist/components/renderers/column/column-renderer.js +597 -0
- package/dist/components/renderers/door/door-renderer.d.ts.map +1 -1
- package/dist/components/renderers/door/door-renderer.js +4 -9
- package/dist/components/renderers/fence/fence-renderer.d.ts.map +1 -1
- package/dist/components/renderers/fence/fence-renderer.js +2 -16
- package/dist/components/renderers/guide/guide-renderer.js +1 -1
- package/dist/components/renderers/item/item-renderer.d.ts.map +1 -1
- package/dist/components/renderers/item/item-renderer.js +2 -1
- package/dist/components/renderers/node-renderer.d.ts.map +1 -1
- package/dist/components/renderers/node-renderer.js +3 -1
- package/dist/components/renderers/roof/roof-renderer.d.ts.map +1 -1
- package/dist/components/renderers/roof/roof-renderer.js +1 -13
- package/dist/components/renderers/roof-segment/roof-segment-renderer.d.ts.map +1 -1
- package/dist/components/renderers/roof-segment/roof-segment-renderer.js +5 -20
- package/dist/components/renderers/slab/slab-renderer.d.ts.map +1 -1
- package/dist/components/renderers/slab/slab-renderer.js +38 -26
- package/dist/components/renderers/spawn/spawn-renderer.d.ts +5 -0
- package/dist/components/renderers/spawn/spawn-renderer.d.ts.map +1 -0
- package/dist/components/renderers/spawn/spawn-renderer.js +32 -0
- package/dist/components/renderers/stair/stair-renderer.d.ts.map +1 -1
- package/dist/components/renderers/stair/stair-renderer.js +7 -25
- package/dist/components/renderers/stair-segment/stair-segment-renderer.d.ts.map +1 -1
- package/dist/components/renderers/stair-segment/stair-segment-renderer.js +4 -2
- package/dist/components/viewer/frame-limiter.d.ts.map +1 -1
- package/dist/components/viewer/frame-limiter.js +5 -1
- package/dist/components/viewer/index.d.ts +3 -0
- package/dist/components/viewer/index.d.ts.map +1 -1
- package/dist/components/viewer/index.js +89 -19
- package/dist/components/viewer/post-processing.d.ts +13 -1
- package/dist/components/viewer/post-processing.d.ts.map +1 -1
- package/dist/components/viewer/post-processing.js +71 -35
- package/dist/components/viewer/selection-manager.d.ts.map +1 -1
- package/dist/components/viewer/selection-manager.js +19 -2
- package/dist/hooks/use-node-events.d.ts +9 -1
- package/dist/hooks/use-node-events.d.ts.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/lib/materials.d.ts +3 -0
- package/dist/lib/materials.d.ts.map +1 -1
- package/dist/lib/materials.js +16 -3
- package/dist/lib/merged-outline-node.d.ts +2 -0
- package/dist/lib/merged-outline-node.d.ts.map +1 -1
- package/dist/lib/merged-outline-node.js +29 -16
- package/dist/store/use-viewer.d.ts +4 -4
- package/dist/store/use-viewer.d.ts.map +1 -1
- package/dist/store/use-viewer.js +2 -2
- package/dist/systems/ceiling/ceiling-system.d.ts +8 -0
- package/dist/systems/ceiling/ceiling-system.d.ts.map +1 -0
- package/dist/systems/ceiling/ceiling-system.js +91 -0
- package/dist/systems/column/column-geometry.d.ts +22 -0
- package/dist/systems/column/column-geometry.d.ts.map +1 -0
- package/dist/systems/column/column-geometry.js +108 -0
- package/dist/systems/door/door-animation-system.d.ts +2 -0
- package/dist/systems/door/door-animation-system.d.ts.map +1 -0
- package/dist/systems/door/door-animation-system.js +53 -0
- package/dist/systems/door/door-system.d.ts +2 -0
- package/dist/systems/door/door-system.d.ts.map +1 -0
- package/dist/systems/door/door-system.js +867 -0
- package/dist/systems/fence/fence-system.d.ts +2 -0
- package/dist/systems/fence/fence-system.d.ts.map +1 -0
- package/dist/systems/fence/fence-system.js +185 -0
- package/dist/systems/guide/guide-system.d.ts.map +1 -1
- package/dist/systems/guide/guide-system.js +1 -26
- package/dist/systems/item/item-system.d.ts +2 -0
- package/dist/systems/item/item-system.d.ts.map +1 -0
- package/dist/systems/item/item-system.js +44 -0
- package/dist/systems/roof/roof-materials.d.ts.map +1 -1
- package/dist/systems/roof/roof-materials.js +18 -1
- package/dist/systems/roof/roof-system.d.ts +16 -0
- package/dist/systems/roof/roof-system.d.ts.map +1 -0
- package/dist/systems/roof/roof-system.js +800 -0
- package/dist/systems/scan/scan-system.d.ts.map +1 -1
- package/dist/systems/scan/scan-system.js +1 -26
- package/dist/systems/slab/slab-system.d.ts +8 -0
- package/dist/systems/slab/slab-system.d.ts.map +1 -0
- package/dist/systems/slab/slab-system.js +155 -0
- package/dist/systems/stair/stair-materials.d.ts.map +1 -1
- package/dist/systems/stair/stair-materials.js +25 -2
- package/dist/systems/stair/stair-system.d.ts +2 -0
- package/dist/systems/stair/stair-system.d.ts.map +1 -0
- package/dist/systems/stair/stair-system.js +770 -0
- package/dist/systems/wall/wall-materials.d.ts.map +1 -1
- package/dist/systems/wall/wall-materials.js +2 -2
- package/dist/systems/wall/wall-system.d.ts +11 -0
- package/dist/systems/wall/wall-system.d.ts.map +1 -0
- package/dist/systems/wall/wall-system.js +595 -0
- package/dist/systems/window/window-animation-system.d.ts +2 -0
- package/dist/systems/window/window-animation-system.d.ts.map +1 -0
- package/dist/systems/window/window-animation-system.js +135 -0
- package/dist/systems/window/window-system.d.ts +12 -0
- package/dist/systems/window/window-system.d.ts.map +1 -0
- package/dist/systems/window/window-system.js +1430 -0
- package/package.json +6 -4
- package/dist/lib/suppress-three-clock-warning.d.ts +0 -25
- package/dist/lib/suppress-three-clock-warning.d.ts.map +0 -1
- package/dist/lib/suppress-three-clock-warning.js +0 -51
- package/dist/systems/export/export-system.d.ts +0 -2
- package/dist/systems/export/export-system.d.ts.map +0 -1
- package/dist/systems/export/export-system.js +0 -60
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pascal-app/viewer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "3D viewer component for Pascal building editor",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"prepublishOnly": "npm run build"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
|
-
"@pascal-app/core": "^0.
|
|
25
|
+
"@pascal-app/core": "^0.7.0",
|
|
26
26
|
"@react-three/drei": "^10",
|
|
27
27
|
"@react-three/fiber": "^9",
|
|
28
28
|
"react": "^18 || ^19",
|
|
@@ -30,14 +30,16 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"polygon-clipping": "^0.15.7",
|
|
33
|
+
"three-bvh-csg": "^0.0.18",
|
|
34
|
+
"three-mesh-bvh": "^0.9.8",
|
|
33
35
|
"zustand": "^5"
|
|
34
36
|
},
|
|
35
37
|
"devDependencies": {
|
|
36
38
|
"@pascal/typescript-config": "*",
|
|
37
|
-
"@types/node": "^
|
|
39
|
+
"@types/node": "^22",
|
|
38
40
|
"@types/react": "^19.2.2",
|
|
39
41
|
"@types/three": "^0.184.0",
|
|
40
|
-
"typescript": "
|
|
42
|
+
"typescript": "6.0.2"
|
|
41
43
|
},
|
|
42
44
|
"keywords": [
|
|
43
45
|
"3d",
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Suppresses the `THREE.Clock: This module has been deprecated` warning
|
|
3
|
-
* emitted by three.js r183+ on every `new THREE.Clock()` call.
|
|
4
|
-
*
|
|
5
|
-
* We don't instantiate `Clock` ourselves — `@react-three/fiber` 9.x
|
|
6
|
-
* (current stable) creates one internally per `<Canvas>` mount. The
|
|
7
|
-
* migration to `THREE.Timer` lands in R3F 10.x (still alpha).
|
|
8
|
-
*
|
|
9
|
-
* Uses three's `setConsoleFunction` hook so we don't touch `console.warn`
|
|
10
|
-
* globally. Only the exact Clock deprecation message is suppressed; all
|
|
11
|
-
* other three.js logs (including TSL stack-trace warnings) pass through
|
|
12
|
-
* untouched.
|
|
13
|
-
*
|
|
14
|
-
* Runs in production as well as dev — the suppressed message is a pure
|
|
15
|
-
* deprecation notice with no user-actionable content.
|
|
16
|
-
*
|
|
17
|
-
* REMOVAL: safe to delete once `@react-three/fiber` no longer constructs
|
|
18
|
-
* `new THREE.Clock()`. To verify after an R3F upgrade:
|
|
19
|
-
* grep -n "new THREE.Clock" node_modules/@react-three/fiber/dist/*.js
|
|
20
|
-
* No hits → delete this file and its import in components/viewer/index.tsx.
|
|
21
|
-
*
|
|
22
|
-
* @see https://github.com/pascalorg/editor/issues/213
|
|
23
|
-
*/
|
|
24
|
-
export {};
|
|
25
|
-
//# sourceMappingURL=suppress-three-clock-warning.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"suppress-three-clock-warning.d.ts","sourceRoot":"","sources":["../../src/lib/suppress-three-clock-warning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Suppresses the `THREE.Clock: This module has been deprecated` warning
|
|
3
|
-
* emitted by three.js r183+ on every `new THREE.Clock()` call.
|
|
4
|
-
*
|
|
5
|
-
* We don't instantiate `Clock` ourselves — `@react-three/fiber` 9.x
|
|
6
|
-
* (current stable) creates one internally per `<Canvas>` mount. The
|
|
7
|
-
* migration to `THREE.Timer` lands in R3F 10.x (still alpha).
|
|
8
|
-
*
|
|
9
|
-
* Uses three's `setConsoleFunction` hook so we don't touch `console.warn`
|
|
10
|
-
* globally. Only the exact Clock deprecation message is suppressed; all
|
|
11
|
-
* other three.js logs (including TSL stack-trace warnings) pass through
|
|
12
|
-
* untouched.
|
|
13
|
-
*
|
|
14
|
-
* Runs in production as well as dev — the suppressed message is a pure
|
|
15
|
-
* deprecation notice with no user-actionable content.
|
|
16
|
-
*
|
|
17
|
-
* REMOVAL: safe to delete once `@react-three/fiber` no longer constructs
|
|
18
|
-
* `new THREE.Clock()`. To verify after an R3F upgrade:
|
|
19
|
-
* grep -n "new THREE.Clock" node_modules/@react-three/fiber/dist/*.js
|
|
20
|
-
* No hits → delete this file and its import in components/viewer/index.tsx.
|
|
21
|
-
*
|
|
22
|
-
* @see https://github.com/pascalorg/editor/issues/213
|
|
23
|
-
*/
|
|
24
|
-
import { setConsoleFunction } from 'three';
|
|
25
|
-
// three's warn() prepends 'THREE.' to its first argument, and the Clock
|
|
26
|
-
// constructor passes 'THREE.Clock: ...', producing a double-prefixed
|
|
27
|
-
// string. Exact equality keeps the suppression surgical — if three ever
|
|
28
|
-
// rewords this, the filter stops matching and the message resurfaces.
|
|
29
|
-
const CLOCK_DEPRECATION_MESSAGE = 'THREE.THREE.Clock: This module has been deprecated. Please use THREE.Timer instead.';
|
|
30
|
-
// HMR-idempotent install guard. setConsoleFunction is a single-slot global
|
|
31
|
-
// in three, so re-evaluating this module on HMR would reinstall the hook.
|
|
32
|
-
const INSTALLED = Symbol.for('@pascal-app/viewer/suppress-three-clock-warning');
|
|
33
|
-
if (!globalThis[INSTALLED]) {
|
|
34
|
-
;
|
|
35
|
-
globalThis[INSTALLED] = true;
|
|
36
|
-
setConsoleFunction((method, message, ...params) => {
|
|
37
|
-
if (method === 'warn' && message === CLOCK_DEPRECATION_MESSAGE) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
// Mirror three's default stack-trace handling so TSL warnings/errors
|
|
41
|
-
// keep their clickable stack frames.
|
|
42
|
-
if (method !== 'log') {
|
|
43
|
-
const first = params[0];
|
|
44
|
-
if (first?.isStackTrace && typeof first.getError === 'function') {
|
|
45
|
-
console[method](first.getError(message));
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
console[method](message, ...params);
|
|
50
|
-
});
|
|
51
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"export-system.d.ts","sourceRoot":"","sources":["../../../src/systems/export/export-system.tsx"],"names":[],"mappings":"AAwBA,eAAO,MAAM,YAAY,YAgDxB,CAAA"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useThree } from '@react-three/fiber';
|
|
3
|
-
import { useEffect } from 'react';
|
|
4
|
-
import * as THREE from 'three';
|
|
5
|
-
import { STLExporter } from 'three/examples/jsm/exporters/STLExporter.js';
|
|
6
|
-
import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter.js';
|
|
7
|
-
import { OBJExporter } from 'three/examples/jsm/exporters/OBJExporter.js';
|
|
8
|
-
import useViewer from '../../store/use-viewer';
|
|
9
|
-
const EDITOR_LAYER = 1; // same constant used across the editor
|
|
10
|
-
function downloadBlob(blob, filename) {
|
|
11
|
-
const url = URL.createObjectURL(blob);
|
|
12
|
-
const a = document.createElement('a');
|
|
13
|
-
a.href = url;
|
|
14
|
-
a.download = filename;
|
|
15
|
-
document.body.appendChild(a);
|
|
16
|
-
a.click();
|
|
17
|
-
document.body.removeChild(a);
|
|
18
|
-
URL.revokeObjectURL(url);
|
|
19
|
-
}
|
|
20
|
-
export const ExportSystem = () => {
|
|
21
|
-
const { scene } = useThree();
|
|
22
|
-
const setExportScene = useViewer((state) => state.setExportScene);
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
const exportFn = async (format = 'glb') => {
|
|
25
|
-
const date = new Date().toISOString().split('T')[0];
|
|
26
|
-
const filename = `pascal-export-${date}`;
|
|
27
|
-
// Clone scene and strip editor-only objects (layer 1 = EDITOR_LAYER)
|
|
28
|
-
const exportRoot = scene.clone(true);
|
|
29
|
-
const toRemove = [];
|
|
30
|
-
exportRoot.traverse((obj) => {
|
|
31
|
-
if (obj.layers.isEnabled(EDITOR_LAYER)) {
|
|
32
|
-
toRemove.push(obj);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
for (const obj of toRemove) {
|
|
36
|
-
obj.parent?.remove(obj);
|
|
37
|
-
}
|
|
38
|
-
if (format === 'glb') {
|
|
39
|
-
const exporter = new GLTFExporter();
|
|
40
|
-
const result = await new Promise((resolve, reject) => {
|
|
41
|
-
exporter.parse(exportRoot, (output) => resolve(output), (err) => reject(err), { binary: true });
|
|
42
|
-
});
|
|
43
|
-
downloadBlob(new Blob([result], { type: 'model/gltf-binary' }), `${filename}.glb`);
|
|
44
|
-
}
|
|
45
|
-
else if (format === 'stl') {
|
|
46
|
-
const exporter = new STLExporter();
|
|
47
|
-
const result = exporter.parse(exportRoot, { binary: true });
|
|
48
|
-
downloadBlob(new Blob([result.buffer], { type: 'model/stl' }), `${filename}.stl`);
|
|
49
|
-
}
|
|
50
|
-
else if (format === 'obj') {
|
|
51
|
-
const exporter = new OBJExporter();
|
|
52
|
-
const result = exporter.parse(exportRoot);
|
|
53
|
-
downloadBlob(new Blob([result], { type: 'model/obj' }), `${filename}.obj`);
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
setExportScene(exportFn);
|
|
57
|
-
return () => setExportScene(null);
|
|
58
|
-
}, [scene, setExportScene]);
|
|
59
|
-
return null;
|
|
60
|
-
};
|