feat(editor): preset-system polish — paint panel, slim action bar, icon rail (#354)
* feat(editor): preset-system polish — paint panel, slim action bar, icon rail - Export `MaterialPaintPanel` so embedders host the paint material picker in their own panel (community docks it in the Build sidebar) instead of the bottom action bar. - ActionMenu: drop the build / material-paint / furnish modes and the structure-tools palette row + paint tray (the host's Build sidebar owns building now). Reduce `structure-tools` to the shared `tools` lookup still used by cursor/floorplan indicators; remove the orphaned `useContextualTools`. - MaterialPicker: swatches wrap into a fluid `auto-fill` grid that fills width. - IconRail (tab-bar): bigger icons, grayscale-when-idle, Radix tooltip, w-14 rail; sync `RAIL_WIDTH` to 56. - Inspector footer: hand the host `footer` to kind-owned custom panels via `InspectorFooterContext` so the save button renders without per-kind wiring. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * chore: biome format pass Whole-repo formatter normalization (line wrap/unwrap only, no logic changes) surfaced by the format-on-edit hook against prior drift. Kept separate from the feature commit so the preset-system diff stays reviewable. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
891e578481
commit
8abfc94b99
@@ -187,13 +187,15 @@ export const wallFloorplanMoveTarget: FloorplanMoveTarget<WallNode> = ({ node })
|
||||
// until the user commits. Batched into a single zustand
|
||||
// notification — otherwise each per-wall `.set` would re-render
|
||||
// every override subscriber once per linked wall per tick.
|
||||
useLiveNodeOverrides.getState().setMany([
|
||||
[wallId, { start: nextStart, end: nextEnd }],
|
||||
...linkedUpdates.map(
|
||||
(upd) =>
|
||||
[upd.id, { start: upd.start, end: upd.end }] as [string, Record<string, unknown>],
|
||||
),
|
||||
])
|
||||
useLiveNodeOverrides
|
||||
.getState()
|
||||
.setMany([
|
||||
[wallId, { start: nextStart, end: nextEnd }],
|
||||
...linkedUpdates.map(
|
||||
(upd) =>
|
||||
[upd.id, { start: upd.start, end: upd.end }] as [string, Record<string, unknown>],
|
||||
),
|
||||
])
|
||||
|
||||
// Surface bridge-wall previews so the floor-plan SVG layer can
|
||||
// render dashed outlines of what `commit()` will insert. Mirrors
|
||||
|
||||
@@ -460,9 +460,7 @@ export const MoveWallTool: React.FC<{ node: WallNode }> = ({ node }) => {
|
||||
if (axis) {
|
||||
const originalProj = originalCenter[0] * axis[0] + originalCenter[1] * axis[1]
|
||||
const rawProj = originalProj + rawDeltaX * axis[0] + rawDeltaZ * axis[1]
|
||||
const snappedProj = shiftPressedRef.current
|
||||
? rawProj
|
||||
: snapScalarToGrid(rawProj, snapStep)
|
||||
const snappedProj = shiftPressedRef.current ? rawProj : snapScalarToGrid(rawProj, snapStep)
|
||||
const perpDelta = snappedProj - originalProj
|
||||
deltaX = axis[0] * perpDelta
|
||||
deltaZ = axis[1] * perpDelta
|
||||
|
||||
Reference in New Issue
Block a user