feat: full-width nav bar, side-by-side panels, all panels synced to URL (#28)#31
Merged
feat: full-width nav bar, side-by-side panels, all panels synced to URL (#28)#31
Conversation
…RL (#28) - Convert GlobalNavigation from floating pill to full-width fixed bar with auto-hide (visible on hover/focus/panel-open) - Add close-all-panels X button to nav bar - Replace per-panel absolute positioning with flex containers (#left-panels, #right-panels); panels portal into them as flex items - Canvas pushed down only when panels are open via --canvas-top CSS var - Sync all panel states to URL query params (not just config) - Add getPanelOffset() and closeAllPanels() to usePanels - Add useDebugScene composable so DebugPanel reads scene elements from any view (removes duplicate DebugPanel in SceneEditor) - Remove panel title headers, slide animations; compact UI spacing Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
✅ Deploy Preview for cnotv-generative-art ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
- Column-stacked panel containers with flex-wrap for multi-panel expansion - Remove intermediate wrapper divs between sheet-content and controls - Fix Vue Set reactivity by replacing in-place mutations with new Set - Prevent nested accordions via ConfigControls nested prop - Accordion trigger uses div (not h3), bold weight - Sidebar scrolls vertically with left padding - Slider track height doubled - ForestGame illustrations config flattened to remove duplicate labels - Add no-nested-accordions and PR closing issue rules to guidelines Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…t panel visibility Multiple components calling usePanels() each set up 6 route.query watchers, creating 36+ competing reactive updates on every route change. This caused Vue's scheduler to process intermediate states, leaving panels invisible until a repaint was triggered externally (e.g. opening DevTools). Guard initialization and watcher setup with a module-level syncInitialized flag so they run only once, bound to the first caller's lifecycle (App.vue). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace the raw panel container divs in App.vue with a PanelContainer component that owns all panel-related styles (previously in panels.scss). Non-scoped styles are required so they apply to content teleported into the container via DialogPortal. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #28
Summary
position: fixed+ CSS math with two flex containers (#left-panels,#right-panels); panels portal into them as flex items — no more overlappingconfig,scene,camera,debug,sidebar,textures) are now synced to query params, not just config--canvas-topCSS custom property set from JSuseDebugScenecomposable (same pattern asuseViewConfig) soSceneEditorregisters scene elements instead of rendering its own localDebugPanelTest plan
?config=truewhen open,?config=falsewhen closed; all panels restore on reload🤖 Generated with Claude Code