Microscope
How a student looks at a sample under a microscope. The microscope is a real object on the desk — the student drags a sample onto its plate and reads the magnified view through a picture-in-picture panel. Same gesture vocabulary as a scale.
A · The conceptual model
The microscope is a lab object on the desk, not a UI panel that drops in. It declares object_purpose: [sample_viewer] in its lab-object manifest — the same declaration scales and thermometers use to publish their "I have a readout" semantic. The kit knows the microscope wants a readout; the readout is the picture-in-picture panel.
Mechanically the microscope is the scale-shaped sample viewer. A student places a sample on its plate, observes the magnified view, switches magnification, and removes the sample when done. The plate is a surface; the sample is what goes on it; the PiP is the readout — same shape as putting a brick on a balance and watching the gram readout, just with imagery instead of digits.
B · What the student does
-
1
The microscope sits on the desk.
At setup, the microscope, the magnifying glass, and the samples all sit on the desk. No PiP yet; the canvas is the only viewport. The student reads the step and identifies the sample to inspect.
-
2
The student drags a sample onto the plate.
Same gesture as placing an object on a scale: pick up the sample, drag it across the desk, drop it on the microscope's plate. Snap-and-settle visualisation while in flight; the sample commits to the plate on release.
The kit enriches the step's
operation: position+on_surfaceconstraint: because the microscope carriesobject_purpose: [sample_viewer], the PiP panel mounts automatically once the sample lands. The author didn't write apip:field — the lab-object catalogue did the work. -
3
The PiP appears, showing the sample magnified.
Once the sample is on the plate, a framed picture-in-picture panel mounts at the screen's right edge, vertically centred between the step bar and the widget bar. Inside:
- viewportSample imagery from the lab-object catalogue (
visual.special_effects.sample.images[]), rendered at the current magnification. - hudLight-mono uppercase — magnification + sample identity bottom-left, scale bar bottom-right.
- controlsA toggle group below the viewport with the supported zoom modes (e.g.
4×/10×/40×). Current is filled, others outlined.
- viewportSample imagery from the lab-object catalogue (
-
4
The student switches zoom modes.
Tap a different objective. The selected button fills, the previous one outlines, the viewport re-renders the same sample at the new magnification. The HUD updates accordingly.
Today's open question: how many zoom levels the kit ships with — one PiP widget version per magnification scheme, or one widget with multiple levels parameterised by the lab-object catalogue. Resolves with the first lesson that needs it.
-
5
The student drags the sample back.
Same gesture as taking something off a scale — drag the sample off the plate, the PiP unmounts, the desk returns to its setup state. The next sample (or the next step) can take over.
If the next step also calls for the microscope but with a different sample, the panel chrome can stay mounted and just swap content. If the next step has no sample on the plate, the PiP tears down.
C · How the author writes it
No pip: field. The author writes a regular position-onto-surface step targeting the microscope's plate; the kit handles the rest.
- step: 5
phase: action
description: "Place the peat sample on the microscope."
ui: drag
operation: position
object: peat_sample
constraints:
- type: on_surface
surface: microscope_1.plate
What the kit fills in
- sample_viewerThe microscope's lab-object manifest declares
object_purpose: [sample_viewer]alongsidevisual.special_effects.sample_display+sample_telemetry. The enricher reads this and adds a PiP widget to the step. - sample.imagesThe peat sample's manifest carries
visual.special_effects.sample.images[]— the zoomed-in renders one per magnification level. The PiP picks the right one based on the active objective. - sample.descriptionThe same manifest carries
sample.description— surfaced as a description widget in the widget bar slot, separate from the PiP.
The microscope behaves the same way a scale does: the operation is "put something on it", the readout fills in from the lab-object catalogue. The author does not author the readout shape; the lab object does.