diff --git a/frontend/src/widgets/MultiselectWidget.test.tsx b/frontend/src/widgets/MultiselectWidget.test.tsx
index 97d93b2b..ce87d65c 100644
--- a/frontend/src/widgets/MultiselectWidget.test.tsx
+++ b/frontend/src/widgets/MultiselectWidget.test.tsx
@@ -123,3 +123,22 @@ test("confirm is enabled when allow_empty is false but something is checked", as
await userEvent.click(btn);
expect(onRespond).toHaveBeenCalledWith({ id: "u1", kind: "multiselect", choices: ["x"] });
});
+
+test("renders reserved controls and emits control on click", async () => {
+ const onRespond = vi.fn();
+ render(
+
+ );
+ await userEvent.click(screen.getByRole("button", { name: /go back/i }));
+ expect(onRespond).toHaveBeenCalledWith({ id: "u1", control: "back" });
+ await userEvent.click(screen.getByRole("button", { name: /^exit$/i }));
+ expect(onRespond).toHaveBeenCalledWith({ id: "u1", control: "exit" });
+});
diff --git a/frontend/src/widgets/MultiselectWidget.tsx b/frontend/src/widgets/MultiselectWidget.tsx
index 38caf8c7..66b608c1 100644
--- a/frontend/src/widgets/MultiselectWidget.tsx
+++ b/frontend/src/widgets/MultiselectWidget.tsx
@@ -1,5 +1,6 @@
import { useState } from "react";
import type { WidgetProps } from "./types";
+import { ReservedControls } from "./ReservedControls";
export function MultiselectWidget({ descriptor, onRespond }: WidgetProps) {
const options = descriptor.options ?? [];
@@ -54,6 +55,10 @@ export function MultiselectWidget({ descriptor, onRespond }: WidgetProps) {
>
Confirm
+ onRespond({ id: descriptor.id, control: c })}
+ />
);
}