393 Commits

Author SHA1 Message Date
Wassim SAMAD
727934fd38
Merge pull request #136 from pascalorg/feat/items-interactivity
Feat/items interactivity
2026-03-06 13:11:33 +01:00
wass08
8d26a4d81c fix issue when switching phase/structure layer 2026-03-06 13:09:25 +01:00
wass08
ca0a3acf17 fixed local thumbnails 2026-03-06 13:09:25 +01:00
wass08
5143d3f0e5 adding new items 2026-03-06 13:09:25 +01:00
wass08
7e6684bbc8 zone label edition 2026-03-06 13:09:23 +01:00
wass08
849baa0a0e default value 2026-03-06 13:08:24 +01:00
wass08
202fc41f42 fade timescale for smooth item anims 2026-03-06 13:08:24 +01:00
wass08
88d0231a95 collection controls 2026-03-06 13:08:24 +01:00
wass08
bc57afb8fa collections + unify color picker 2026-03-06 13:08:23 +01:00
wass08
8f65daa853 handling lights 2026-03-06 13:08:23 +01:00
wass08
e2de931aa7 adjust fan anim 2026-03-06 13:08:23 +01:00
wass08
54051b11fa item system controls 2026-03-06 13:08:21 +01:00
wass08
927ecba054 schema and interactive store 2026-03-06 13:06:33 +01:00
Wassim SAMAD
3e40c1dde0
Merge pull request #135 from pascalorg/revert-134-fix/bugs
Revert "Restore inline zone label editing on canvas"
2026-03-06 13:05:42 +01:00
Wassim SAMAD
e0d97df8c8
Revert "Restore inline zone label editing on canvas (#134)"
This reverts commit 036344d705a98f8ed5a2cc886ea81e330d9ad108.
2026-03-06 13:04:52 +01:00
Aymeric Rabot
036344d705
Restore inline zone label editing on canvas (#134)
* fix: harden viewer/editor renderer init and error handling

* Bump @biomejs/biome and turbo versions

Update devDependencies: bump @biomejs/biome from ^2.4.4 to ^2.4.6 and turbo from ^2.8.12 to ^2.8.13. Regenerated bun.lock to reflect the updated resolved package versions.

* Restore inline zone label editing on canvas
2026-03-05 16:45:32 -05:00
Aymeric Rabot
fb2c7c6c71
fix: harden viewer/editor renderer init and error handling (#133) 2026-03-05 15:42:58 -05:00
Wassim SAMAD
862798b5e7
Merge pull request #132 from pascalorg/feat/items-community
Feat/items community
2026-03-05 00:45:18 +09:00
wass08
299cbdb0b3 fix build 2026-03-04 16:29:55 +01:00
wass08
47747495e5 polish listing 2026-03-04 15:46:18 +01:00
wass08
799cf2f56c remove issue esc key 2026-03-04 15:28:12 +01:00
wass08
25908ecfc6 square shape 2026-03-04 15:20:43 +01:00
wass08
d79d54c4d8 evader for preset 2026-03-04 15:17:01 +01:00
wass08
23ed54cb6a thumbnail generation 2026-03-04 15:13:07 +01:00
wass08
ba2dfa8caa presets community 2026-03-04 13:38:51 +01:00
wass08
a86609aa5c community presets draft 2026-03-04 13:18:18 +01:00
wass08
c26c7da091 remove logs 2026-03-04 11:25:42 +01:00
Wassim SAMAD
92f15e28f1
Merge pull request #131 from pascalorg/feat/zone-labels-polish
Feat/zone labels polish
2026-03-04 19:24:53 +09:00
wass08
5e0c64b760 remove position hack for zone + fade-in-out anims 2026-03-04 11:22:01 +01:00
wass08
add637e11c pin for zones on hover 2026-03-04 11:13:20 +01:00
Aymeric Rabot
bee4613b82
Add project versioning & publish flow (#130)
* Add project versioning & publish flow

Introduce project model versioning and publishing support.

- DB: add published_model_version column to projects (migration + schema + types).
- Models: add version status types and helpers, implement getProjectVersionStatus, enhanced getProjectModel to load draft/published/legacy fallbacks, saveProjectModel now manages draft creation/updating and avoids no-op saves, saveProjectVersion to lock/save/publish versions and create next draft, publishProjectModel to republish specific saved versions. Includes scene-graph equality checks and authenticated project ownership checks.
- UI: AppSidebar shows publish/draft status, polling refresh, and Save / Save & publish / Publish actions that flush the editor scene before version operations. Hook update: load scene from result.data.model.scene_graph.
- Public project loader: prefer published version with legacy fallbacks.

This enables safe draft editing, explicit saves, publishing, and keeps autosave working across version locks.

* Add project versioning UI, APIs & preview mode

Introduce full version management support: UI, backend actions, and editor integration.

- UI: Add a Versions popover to the app sidebar with search, relative timestamps, preview, restore and publish controls; disable version actions while previewing and show proper labels/states. Imported new icons, popover and tooltip primitives and added formatRelativeTime helper.
- Actions: Add ProjectVersionListItem type and APIs getProjectVersionList and getProjectVersionByNumber to list and fetch saved (non-draft) versions.
- Hooks: Extract applySceneGraphToEditor and sync editor selection logic; ensure scene loading applies selection and supports preview mode (which suppresses autosave).
- Store: Add isVersionPreviewMode to project store with setter and isSceneLoading flag usage to prevent autosave while previewing.
- Misc: Wire up version list loading, previewing, restoring and publishing flows, and refresh version status/list after actions.

These changes enable browsing historical project versions, previewing them without triggering autosaves, and restoring or publishing selected versions.

* Improve version preview, restore flow & draft handling

- Add scene graph snapshot to preserve unsaved work during preview
- Include draft versions and metadata in version list
- Add getProjectVersionById for direct ID-based lookups
- Add autosave status to project store
- Refactor sidebar version UI (remove search, use save icon)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:56:46 -05:00
Aymeric Rabot
0edbc65e8d Update polygon-editor.tsx 2026-03-03 16:22:08 -05:00
Aymeric Rabot
48979ec014 fix raycaster layers, polygon drag, slider undo, and grid events
- Enable EDITOR_LAYER on R3F raycaster for proper hit detection
- Fix polygon editor drag using refs and direct position passing
- Handle pointercancel events and fix pointerId access in polygon editor
- Fix slider undo by reverting to start value before resuming temporal state
- Allow grid:move during camera drag so polygon editor works while panning
- Bump better-auth to ^1.5.2 and turbo to ^2.8.12
- Remove explicit return type on createAuth for better inference

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 14:41:19 -05:00
Wassim SAMAD
efeea1719c
Merge pull request #129 from pascalorg/fix/thumbnails-and-doors
Fix/thumbnails and doors
2026-03-02 10:16:54 +09:00
wass08
267fd3960e hide guides and scans before thumbnails 2026-03-02 10:14:36 +09:00
wass08
85232d6b0d hide tools from thumbnail 2026-03-02 10:10:58 +09:00
wass08
0f271985d8 take only building layers to the thumbnail 2026-03-02 10:01:22 +09:00
wass08
8e097537d0 fix duplicate door 2026-03-02 09:09:31 +09:00
Wassim SAMAD
4b94f6121a
Merge pull request #128 from pascalorg/fix/remove-is-editor
Fix/remove is editor
2026-03-02 08:55:10 +09:00
wass08
f17e0cb955 fix dot color 2026-03-02 08:53:34 +09:00
wass08
882d3fec7e remove is editor completely 2026-03-02 08:50:53 +09:00
wass08
d81a48d64e remove isEditor for site-edge-labels 2026-03-02 08:35:16 +09:00
Aymeric Rabot
f1d0d3a78c
feat(editor): redesign panel UI with shared control components (#127)
Extract reusable control components (SliderControl, MetricControl, SegmentedControl,
ToggleControl, ActionButton, PanelSection) and PanelWrapper to reduce duplication
across all property panels. Net reduction of ~500 lines.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:35:19 -05:00
Aymeric Rabot
2ddf10f3f0 Play SFX when placing doors and windows
Add audio feedback for item placement by importing sfxEmitter and emitting 'sfx:item-place' in DoorTool and WindowTool. This change triggers a placement sound when a door or window node is created, improving UX by confirming successful placement.
2026-02-28 01:39:35 -05:00
Aymeric Rabot
7dde5dc578 Update ground-occluder.tsx 2026-02-28 01:34:41 -05:00
Aymeric Rabot
bde8a005a7
feat(viewer): redesign viewer UI with dark toolbar and camera controls (#126)
Overhaul viewer overlay with a unified bottom toolbar, dark theme support,
theme toggle, camera orbit/top-view controls, and fix TypeScript array
access errors for level and wall mode cycling.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 01:28:37 -05:00
Aymeric Rabot
98c1d5247e
feat: filter empty projects from public gallery (#125)
* feat(community): filter empty projects from public gallery

Add is_empty column to projects table so the public gallery only shows
projects with actual content. Scene graph emptiness is computed on save
and on creation, and a backfill migration marks existing non-empty
projects. Also cleans up import ordering, fixes README migration path,
and removes stale feedback table migration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Use ESNext modules and bundler resolution

Update packages/db tsconfig to emit ESNext modules and use 'bundler' moduleResolution. This enables modern ESM output and bundler-style resolution for the db package (keeps outDir and rootDir unchanged).

* feat(editor): add dark mode theme and grid visibility toggle

Add theme state to viewer store with light/dark modes, dark-aware
lighting and background colors, grid show/hide toggle in settings,
and theme toggle buttons in the sidebar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add ground occluder, animated lighting & UI tweaks

Introduce a ground occluder and smoother animated lighting while adjusting editor UI and icons. Viewer: add GroundOccluder (uses polygon-clipping to union slab/zone polygons) and AnimatedBackground, integrate both into the Canvas; improve Lights to interpolate intensities/colors/ambient for smooth theme transitions. Editor: refactor sidebar header to support inline project title editing and move the theme toggle; replace some lucide icons with image assets and add a settings icon (apps/editor/public/icons/settings.png). Also add polygon-clipping to the viewer package dependencies.

* Update dark mode background color and clean up imports

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 23:49:48 -05:00
Aymeric Rabot
5077011c26 Initialize WebGPU renderer before post-processing
Make the gl prop synchronous and move/await renderer initialization inside the post-processing component. index.tsx: remove async gl factory and the await renderer.init() so renderer is created synchronously. post-processing.tsx: add isInitialized state, an async initRenderer that calls renderer.init(), and guard post-processing setup until init completes (with mounted cleanup and updated effect deps). This ensures the WebGPU renderer is fully initialized before building the render pipeline and avoids using an async gl factory.
2026-02-27 14:28:31 -05:00
Aymeric Rabot
64de2a8e63 feat(editor): direct-to-Supabase uploads with progress for large scans
Upload files directly to Supabase Storage via signed URLs, bypassing
the Next.js 100MB body size limit. Supports scans up to 200MB with
real-time progress tracking that persists across sidebar panel switches.

- Add Zustand upload store for persistent upload state
- Add createAssetUploadUrl/confirmAssetUpload server actions
- Add XHR-based upload orchestrator with progress events
- Scene node creation works even if sidebar panel unmounts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 14:19:06 -05:00
Aymeric Rabot
77f41ba8b7 fix(db): add missing drizzle metadata for storage buckets migration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 13:15:21 -05:00