Skip to content

feat(editor): edit shared parameters on a homogeneous multi-selection - #680

Merged
wass08 merged 1 commit into
mainfrom
feat/multi-node-editing
Aug 18, 2026
Merged

wass08 merged 1 commit into
mainfrom
feat/multi-node-editing

Conversation

@wass08

@wass08 wass08 commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

What does this PR do?

Selecting several nodes of the same type now opens a shared parameters inspector instead of the actions-only multi-select panel. Edits are absolute (every node gets the value you land on), mixed fields show a mixed indicator until touched, and one updateNodes call keeps the whole change as a single undo step.

Walls and ceilings keep Follows level vs Custom height. Slider drags preview through live overrides so geometry updates without history churn, and the slider readout tracks the drag. Mobile uses the same panel in the existing sheet.

How to test

  1. bun dev (or hosted community against this SHA). Open a project with several walls.
  2. Shift-click 3 walls of mixed heights. Confirm the inspector title is like "3 walls", mixed Height shows Mixed, and Follows level / Custom height is present.
  3. Switch to Custom height if needed, drag Height, confirm all three walls update in 3D and the slider number moves while dragging. Cmd+Z restores all three at once.
  4. Shift-click a wall and a slab. Confirm the actions-only panel (Group / Duplicate / Delete) with no shared parameters.

Screenshots / screen recording

N/A in this PR — verified locally in community on :3001. A reviewer clip of the 3-wall height drag is still useful.

Checklist

  • I've tested this locally with bun dev
  • My code follows the existing code style (run bun check to verify)
  • I've updated relevant documentation (if applicable)
  • This PR targets the main branch

Made with Cursor

…tion

Selecting several nodes of the same type now shows one inspector for their shared parametrics.groups fields, with mixed-value controls, a single undo step, and wall/ceiling follows-level vs custom height.

Co-authored-by: Cursor <cursoragent@cursor.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 4 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want reviews to match your repository better? Bugbot Learning can learn team-specific rules from PR activity. A team admin can enable Learning in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 63f339f. Configure here.

(height: number) => {
commitMultiNodeFields(nodeIds, () => ({ height }), parametrics)
},
[nodeIds, parametrics],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ceiling height skips clamp bound

High Severity

Multi ceiling height preview and commit write the slider value with no per-node getCeilingClampBound limit. The single ceiling panel clamps every height write and caps the slider with that bound, so multi-edit can push ceilings through the storey or a covering slab and produce invalid geometry.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 63f339f. Configure here.

selectedIds.length > 1
? formatSelectionBreakdown(selectedIds.map((id) => s.nodes[id as AnyNodeId]?.type))
: '',
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mobile title ignores selection proxies

Medium Severity

multiBreakdown builds the mobile bar/sheet title from raw selectedIds types, while routing and MultiParametricInspector edit proxy-resolved ids. Selecting children that resolve to parents (for example cabinet modules → cabinets) can show a child-type label while the sheet edits parent parameters.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 63f339f. Configure here.

const matchedGroup = useMemo(
() => selectionMatchesSessionGroup(sessionGroups, selectedIds),
[sessionGroups, selectedIds],
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Session group ignores live ids

Low Severity

MultiParametricInspector calls selectionMatchesSessionGroup without liveIds, unlike MultiSelectionPanel. After members are deleted but still linger in selection or group storage, the session-group banner can disagree with Group/Ungroup actions that do filter live ids.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 63f339f. Configure here.

parametrics={parametrics}
/>
)
})}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Curve edits ignore wall children

Medium Severity

Homogeneous wall multi-edit always exposes curveOffset from registry parametrics. The single wall panel hides that control when doors, windows, or wall-attached items are present. Multi-edit can therefore curve walls that host openings and break opening placement.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 63f339f. Configure here.

@wass08
wass08 merged commit 6cfff80 into main Aug 18, 2026
3 checks passed
@wass08
wass08 deleted the feat/multi-node-editing branch August 18, 2026 16:23
ovurrsl pushed a commit to ovurrsl/editor that referenced this pull request Aug 20, 2026
…tion (pascalorg#680)

Selecting several nodes of the same type now shows one inspector for their shared parametrics.groups fields, with mixed-value controls, a single undo step, and wall/ceiling follows-level vs custom height.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant