* sync: port 2D editing features from monorepo (v0.3.0) ## New Features ### Floorplan Panel (7.5K LOC) - Full 2D editing interface with wall drawing, measurement, and unit display - Interactive floorplan view with pan/zoom, grid snapping - Wall thickness visualization, door/window placement - Zone and slab polygon editing - Guide image overlay support - Metric/imperial unit toggle ### Command Palette Overhaul - Complete rewrite with new command registry system - Keyboard shortcuts UI with ShortcutToken component - Editor-specific commands (floorplan, measurements, camera focus) - Improved search and action organization ### Wall Measurements - Real-time wall length labels in 3D view - Metric/imperial conversion - Wall measurement UI component ### Enhanced Tools - Wall drafting utilities (grid snapping, validation) - Node action menu for quick operations - Improved polygon editing for zones/slabs/sites - Roof segment panel for granular roof control ## Package Changes ### @pascal-app/core@0.3.0 - New wall-footprint.ts: 2D wall footprint calculation - Wall mitering exports for floorplan view - camera-controls:focus event - Space detection undo pause/resume - Mark sibling nodes dirty on deletion (miter recalc) ### @pascal-app/viewer@0.3.0 - ErrorBoundary component for robust item rendering - Broken item fallback UI - Wall renderer: mark dirty on mount - Ground occluder: only lowest level punches through - Unit state (metric/imperial) in viewer store ### @pascal-app/editor@0.1.0 - 48 file changes (16 new, 32 modified) - New stores: useCommandRegistry, usePaletteViewRegistry - Tree node drag-and-drop system - Level selection utilities - Enhanced scene graph operations ## Apps/Editor - GeistPixelSquare font for pixel-perfect UI - Blueprint icon asset - Updated layout and globals for font support ## Security - Zero AI imports or internal package refs - All monorepo-specific code excluded - Clean audit: no API keys or secrets ## Testing - Security audit passed ✅ - All AI/internal code excluded ✅ - Version bumps applied ✅ 79 files modified, 16 files added ~2600 insertions, ~1400 deletions * fix: lint cleanup — suppress intentional dep warnings, fix missing dep, remove stale ignores - Add biome-ignore for 3 intentional useEffect reset patterns (levelId, selectedGuide, selectedId) - Fix actual missing dependency: currentBuildingId in handleSiteEditShortcutSelect callback - Remove 3 stale biome-ignore comments in r3f.d.ts (rule not active) Build and lint pass clean. * fix: type errors — polygon area guards, selection cast, readonly keywords, door guard - ceiling-panel, slab-panel, ceiling-tree-node, slab-tree-node, zone-tree-node: guard polygon[i]/polygon[j] array access before arithmetic (TS2532) - scene.ts: introduce toViewerSelection() helper to cast persisted string IDs to branded template literal types expected by useViewer.setSelection (TS2345) - door-panel: guard early return when node is undefined in setSegmentHeightRatio (TS18048) - editor-commands: remove 'as const' from inline command object, keywords is mutable string[] (TS2322) All type checks pass. Build and lint clean. --------- Co-authored-by: Anton Pascal <anton-pascal@users.noreply.github.com>
97 lines
2.2 KiB
TypeScript
97 lines
2.2 KiB
TypeScript
/**
|
|
* R3F JSX intrinsic element declarations for three.js primitives.
|
|
*
|
|
* @react-three/fiber augments JSX.IntrinsicElements globally via module
|
|
* augmentation, but the augmentation doesn't reliably propagate during
|
|
* composite tsc --build in CI because bun resolves @react-three/fiber's
|
|
* peer deps into variant directories where @types/three is unreachable.
|
|
*
|
|
* This file replicates the module augmentation pattern R3F uses, declaring
|
|
* the subset of three.js elements we actually use.
|
|
*
|
|
* The empty export makes this file a module, which is required for
|
|
* `declare module` to augment existing modules rather than replace them.
|
|
*/
|
|
|
|
export {}
|
|
|
|
interface ThreeJSXElements {
|
|
// Containers
|
|
group: any
|
|
scene: any
|
|
// Geometries
|
|
boxGeometry: any
|
|
planeGeometry: any
|
|
circleGeometry: any
|
|
cylinderGeometry: any
|
|
sphereGeometry: any
|
|
extrudeGeometry: any
|
|
shapeGeometry: any
|
|
bufferGeometry: any
|
|
edgesGeometry: any
|
|
ringGeometry: any
|
|
// Meshes & lines
|
|
mesh: any
|
|
instancedMesh: any
|
|
line: any
|
|
lineSegments: any
|
|
lineLoop: any
|
|
points: any
|
|
// Materials
|
|
meshStandardMaterial: any
|
|
meshBasicMaterial: any
|
|
meshPhongMaterial: any
|
|
meshLambertMaterial: any
|
|
meshPhysicalMaterial: any
|
|
meshNormalMaterial: any
|
|
shadowMaterial: any
|
|
lineBasicMaterial: any
|
|
lineDashedMaterial: any
|
|
pointsMaterial: any
|
|
shaderMaterial: any
|
|
rawShaderMaterial: any
|
|
spriteMaterial: any
|
|
// Lights
|
|
ambientLight: any
|
|
directionalLight: any
|
|
pointLight: any
|
|
spotLight: any
|
|
hemisphereLight: any
|
|
rectAreaLight: any
|
|
// Cameras
|
|
perspectiveCamera: any
|
|
orthographicCamera: any
|
|
// Helpers
|
|
gridHelper: any
|
|
axesHelper: any
|
|
arrowHelper: any
|
|
// Misc
|
|
sprite: any
|
|
lOD: any
|
|
fog: any
|
|
color: any
|
|
// Buffer attribute
|
|
bufferAttribute: any
|
|
instancedBufferAttribute: any
|
|
// Primitive (R3F-specific)
|
|
primitive: any
|
|
}
|
|
|
|
declare module 'react' {
|
|
namespace JSX {
|
|
interface IntrinsicElements extends ThreeJSXElements {}
|
|
}
|
|
}
|
|
|
|
declare module 'react/jsx-runtime' {
|
|
namespace JSX {
|
|
interface IntrinsicElements extends ThreeJSXElements {}
|
|
}
|
|
}
|
|
|
|
declare module 'react/jsx-dev-runtime' {
|
|
namespace JSX {
|
|
interface IntrinsicElements extends ThreeJSXElements {}
|
|
}
|
|
}
|