[fix] roadmap #15 batches B+C: UI quick fixes + color picker revival - #82
Merged
Conversation
…w resize Roadmap #15 batch B (plan: cloud repo plans-core/roadmap-15, specs inline): - B1 ThemedSelect: the portaled popup copied the TRIGGER's width, and the trigger is sized to the SELECTED label - picking a short option ("Box") ellipsised every longer name on reopen. The trigger width is now a MINIMUM; the popup sizes to its content (capped at 28rem / the viewport) and is clamped back on screen when that overflows the right edge. Fixes all ~22 call sites at once. - B2 duplicate: a multi-select member wears an emissive highlight, and the clone's fresh material baked it in - the FIRST clone stayed selection-blue forever (its tinted value got recorded as its "original"). Clones now restore the source's recorded emissive (stripSelectionTint), and duplicateSelection no longer selects each clone mid-loop (which collapsed the set and restored sources one at a time); it selects the whole clone set once at the end. - B3 packs: double-click / Enter / "Place in scene" now show the same dismissible loading toast the viewport DROP path shows (shared holdLoadingToast helper) - a slow CDN fetch used to look like nothing happened. - B4 Connect: the chevron badges the toast count the CLOSED drawer is holding when toasts are routed drawer-only (mirrors the drawer tab badge; amber when approvals are pending). - B5 Sessions: naming a session (save + rename) is an inline textbox instead of window.prompt - Enter commits, Esc cancels, focus is taken automatically. - B6 modals: app modals are non-modal <dialog>s, so the page behind them is NOT inert and window key handlers still fired (WASD flew the camera behind Settings). New derived `anyModalOpen` gates shortcuts.js, editorNavigation (keydown AND the per-frame fly, which also clears held keys) and inputRuntime; only Settings was guarded before. - B7 windows: dragWindow gains an opt-in `resizable` corner grabber that persists {w,h} in the same win:<key> record and re-clamps on viewport resize; What's New opts in and goes full-screen below the Connect bar at <=640px (the .tp-modal-frame treatment). - B8 context menu: Edit mesh / Sculpt hide for a multi-selection - they are single-object modes and silently acted on the last-picked object only. Verification: new tests/e2e/ui-fixes-15b.test.cjs (22 checks covering B2/B4/ B5/B6/B7/B8), themed-select extended for B1; sessions + whats-new + the new suite green; build green; svelte-check baseline 435/62 held. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Roadmap #15 batch C. svelte-awesome-color-picker 3.x -> 4.1.3 (deps housekeeping) is a Svelte-5 runes rewrite with NO component events, so every `on:input` handler in the Inspector silently stopped firing - the swatch still tracked the drag (bind:hex) while nothing was applied. That is the reported "changing color in mesh properties does nothing". - C1 mechanism: all five pickers (material, light, hemisphere ground, scene background, fog) move to the v4 `onInput` PROP and read `c.hex` (v4 passes {color,hsv,rgb,hex} directly, not event.detail). - C1 binding: the pickers now take `hex` ONE-WAY. v4's ColorPicker writes its own snapshot back through a binding, which CLOBBERS external writes - a plain `backgroundColor.set(...)` was reverted while the picker was mounted. onInput is the input channel, so a binding buys nothing and costs correctness. (Also drops 14 svelte-check errors: 435 -> 421, gate updated.) - C1 sky: background/fog edits wrote scene.background / scene.fog directly and the next applyEnvironment() restored the preset values - so even with the handler alive the color snapped back. New `editEnvSky()` in environment.js detaches a live custom preset (the editRigComponent precedent), so sky edits stick, persist and replicate as {type:'environment'} instead of the old point-fix {type:'color', uuid:'background'} messages. - C1 material: the typed hex box routes through the shared materialsHandler.setObjectColor (undo + replication); the picker drag keeps its 600ms gesture debounce so a drag is ONE undo entry, not one per frame. - C2: the picker's hex/rgb/hsv text inputs are enabled everywhere (isTextInput + textInputModes), with the built-in mode cycle button - in both mesh properties and configure scene. Verification: new tests/e2e/color-picker-15c.test.cjs (12 checks - modes render, the picker applies + replicates + records one debounced undo entry, undo steps back, the scene background reaches three.js); inspector, environment, environment-v2 and ui-fixes-15b green; build green; svelte-check 421/62 (down from 435, release.yml gate ratcheted). Co-Authored-By: Claude Fable 5 <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.
Roadmap #15 Opus lane (plans: cloud repo
plans-core/roadmap-15-editmesh-notes-polish.md, specs inline). Two commits, independent of PR #81.B — UI quick fixes (8)
duplicateSelectionselects the clone set once at the end instead of per-item mid-loop.holdLoadingToast).toastsInDrawerOnlyis on.window.prompt.<dialog>s so the page stays live; WASD flew the camera behind Settings. New derivedanyModalOpengates shortcuts, editorNavigation (keydown + per-frame, clearing held keys) and inputRuntime. Only Settings was guarded before.{w,h}, re-clamps on viewport resize) + What's New goes full-screen below the Connect bar at ≤640px.C — color picker revival
svelte-awesome-color-picker3.x→4.1.3 is a runes rewrite with no component events, so everyon:inputhandler died silently — the reported "changing color does nothing". Fixed across all five pickers (material, light, hemisphere ground, background, fog):onInputprop +c.hex(v4 passes the payload directly, notevent.detail).hex=: v4 writes its own snapshot back through a binding and clobbers external writes (a plainbackgroundColor.set()was reverted while the picker was mounted). Also drops 14 svelte-check errors (435 → 421); release gate ratcheted.applyEnvironment()restored the preset — so the colour snapped back even with a live handler. NeweditEnvSky()detaches a live custom preset (theeditRigComponentprecedent), so it sticks, persists and replicates.materialsHandler.setObjectColor(undo + replication); the drag keeps its 600 ms debounce = one undo entry per gesture.Verification
tests/e2e/ui-fixes-15b.test.cjs(22 checks) andtests/e2e/color-picker-15c.test.cjs(12 checks);themed-selectextended for B1.npm run buildgreen;npx svelte-check421/62 (down from 435).Companion docs commit (batch I,
theprototype-docs@da30813): the 9 missing node pages — collider, motor, angularvelocity, onenter, onexit, velocity, flowinput, flowoutput, objectflow. Every catalog node type now has a page.🤖 Generated with Claude Code