sampling_locations.svelte + SampleField.svelte — Sampling Locations The main data collection interface for the Science task. Manages a list of Sample objects stored in the samples Svelte store. Sample card Each sample in the list is rendered as a card with an editable location name field and a set of SampleField sub-components. The location name field updates location_name_check automatically as the operator types. SampleField.svelte A reusable row sub-component used inside each sample card. Renders a checkbox (bound to a checked prop), a label, the current value, and a + button that opens the relevant modal. Used for: Coordinates, Size, Weight, Image Before, Image After. Modals Clicking a + button opens a modal specific to that field type: Coordinates — a single button that calls invoke("request_coordinates") , receives a [lat, lon] tuple from the rover, formats it as a string, and saves it to the sample. Measurement — shows two camera feeds (arm + front) in measure mode. The operator clicks two corresponding points on the two feeds to trigger a stereo measurement via invoke("request_measurement") . The returned value is saved to the sample. Weight — a single button that calls invoke("request_weight") and saves the returned gram value to the sample. Image Before / Image After — shows all three camera feeds. Clicking any feed calls invoke("save_snapshot") which captures a JPEG frame from that stream and saves it to the images/ directory. The filename is {sample.label}_{before|after} . Pick up Rock This section is work in progress A separate overlay accessible from a button at the bottom of the component. Shows all three camera feeds in pick mode. The pick() function is currently a stub for the rover arm pick-up command.