Acquisition sequencer

Edits supplied capture steps, exact exposure, time, depth and channel values, and distinguishes requested actions from recorded run state.

Capture plan
  1. BaselineNot run
    Channel
  2. Follow-upNot run
    Channel

Prepare a capture plan

Optics bench / Draft sequence

Sample 042 capture plan
Edit supplied settings and record a plan review. No acquisition is started.
  1. BaselineNot run
    Channel
  2. Follow-upNot run
    Channel

Use it for

  • Editing and reordering an existing capture plan with onStepsChange.
  • Pass exact values and units from the acquisition application; the component performs no conversions or scheduling.
  • Use explicit step actions and onAction to request operations. Supply pending and confirmedLabel from actual host state.

Not for

  • Treating an edit or action callback as proof that capture ran successfully.
  • Deriving instrument settings or executing acquisition. The host owns commands, persistence and confirmations.
  • More than 128 steps or 128 channels.

Three ways in. They share one source, so the pixels match whichever you pick.

1. Import the package

npm install @noorddev/vlak-react

// once, next to your app's root
import "@noorddev/vlak-react/css";

import { AcquisitionSequencer } from "@noorddev/vlak-react";

Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/acquisition-sequencer.

2. Vendor the source

npx @noorddev/vlak-cli add acquisition-sequencer

The StyleX leaf lands in components/vlak/ with its dependencies, for your own compiler to own. See StyleX.

3. Through shadcn

npx shadcn add https://vlak.dev/r/acquisition-sequencer.json

The same registry item, installed by shadcn's CLI.

CSS only

<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />

No React. Link vlak.css and use the markup and classes below.

import { useState } from "react";
import { AcquisitionSequencer } from "@noorddev/vlak-react";
import type { AcquisitionStep } from "@noorddev/vlak-react";

function CapturePlan() {
  const [steps, setSteps] = useState<readonly AcquisitionStep[]>([
    { id: "first", label: "First plane", exposure: 10, exposureUnit: "ms", time: 0, timeUnit: "s", depth: -1, depthUnit: "µm", channel: "phase", status: "Not run" },
    { id: "second", label: "Second plane", exposure: 10, exposureUnit: "ms", time: 5, timeUnit: "s", depth: 0, depthUnit: "µm", channel: "phase", status: "Not run" },
  ]);
  return <AcquisitionSequencer label="Capture plan" channels={[{ id: "phase", label: "Phase" }]} steps={steps} onStepsChange={setSteps} />;
}

AcquisitionSequencer

A controlled capture plan editor and recorded-state display, without an acquisition engine.

PropTypeDefaultDescription
labelrequiredReactNode
stepsrequiredreadonly AcquisitionStep[]
channelsrequiredreadonly AcquisitionChannel[]
onStepsChange(steps: readonly AcquisitionStep[]) => void
onAction(stepId: string, actionId: string) => void
descriptionReactNode
readOnlybooleanfalse

Also accepts FieldsetHTMLAttributes<HTMLFieldSetElement>.

KeysDoes
TabMoves through enabled numeric inputs, channel selectors and step actions.
Arrow keys, Home, End, typingEdits native numeric fields or navigates the opened channel list.
Enter, SpaceConfirms the active channel option or requests the focused action or reorder.
EscapeCloses the channel list without changing the supplied selection.
<fieldset class="rs-acquisition-sequencer"><legend class="rs-acquisition-sequencer-legend">Capture plan</legend><ol class="rs-acquisition-sequencer-list"><li class="rs-acquisition-sequencer-step"><div class="rs-acquisition-sequencer-head"><span class="rs-acquisition-sequencer-title">First plane</span><span class="rs-acquisition-sequencer-copy">Not run</span></div><p class="rs-acquisition-sequencer-value">Exposure 10 ms · Time offset 0 s · Depth -1 µm · Phase</p></li></ol></fieldset>
.rs-acquisition-sequencer.rs-acquisition-sequencer-legend.rs-acquisition-sequencer-list.rs-acquisition-sequencer-step.rs-acquisition-sequencer-head.rs-acquisition-sequencer-title.rs-acquisition-sequencer-fields.rs-acquisition-sequencer-label.rs-acquisition-sequencer-control.rs-acquisition-sequencer-value.rs-acquisition-sequencer-copy.rs-acquisition-sequencer-actions.rs-acquisition-sequencer-action