Removing a media item from one image prop deletes the stored value of every other media-backed prop on the same component instance
### Overview
A component (SDC or code component) has two image props, e.g. `firstImage` and `secondImage`. Each prop has its own media item. Clicking the remove (X) button on one prop's media item also deletes the stored value of the other prop. The other prop was not touched. This happens for any number of media-backed props: all props except the removed one lose their value.
### Steps to reproduce
1. Create a component with two image props (e.g. `sdc.canvas_test_sdc.mixed-images-with-example`, or any code component with two image props).
2. Add the component to a page in the Canvas editor.
3. Add a different media image to each of the two props.
4. Click the X (remove) button on one prop's media item.
5. Observe the PATCH response from `/canvas/api/v0/layout/...`: the removed prop is stored as `null` (correct), but the untouched prop is absent from the model entirely. Its image is gone from the preview and from the saved data.
### Root cause
`buildRemoveModel()` in `ui/src/components/form/components/drupal/DrupalMediaListContainer.tsx` calls `syncPropSourcesToResolvedValues()` over all props before sending the PATCH. That helper copies each prop's `resolved` value into its `source.value`. After any prior PATCH round-trip, the Redux model's `resolved` values for media props are server-evaluated objects (`{src, alt, width, height}`), not media entity IDs. An evaluated object is not a storable value for the entity-reference-backed `StaticPropSource`, so `clientModelToInput()` (`JsonSchemaPropsComponentSourceBase.php`) treats the untouched prop as empty and drops it from the stored inputs.
Other callers of `syncPropSourcesToResolvedValues()` are unaffected: they re-derive resolved values from form state through the widget transforms, which produce media IDs. The remove path is the only caller that feeds the helper server-evaluated values.
Introduced in #3577219. Existing remove-path tests only cover components with a single media prop, so the corruption of other props was not observable.
### Proposed resolution
In `buildRemoveModel()`, only rewrite the removed prop's `source.value`; leave all other props' sources untouched. Add a Playwright regression test using `mixed-images-with-example` that populates two image props and removes one.
### User interface changes
None.
---
AI-Generated: Yes (Used Claude Code to diagnose the root cause and draft this issue; findings verified by reproducing against a local site).
issue