diff --git a/frontend/src/components/BulkPrinterToolbar.tsx b/frontend/src/components/BulkPrinterToolbar.tsx
index 301279967..aa4203fc4 100644
--- a/frontend/src/components/BulkPrinterToolbar.tsx
+++ b/frontend/src/components/BulkPrinterToolbar.tsx
@@ -108,7 +108,7 @@ export function BulkPrinterToolbar({
printing: t('printers.status.printing'),
paused: t('printers.status.paused', 'Paused'),
finished: t('printers.status.finished', 'Finished'),
- idle: t('printers.status.available'),
+ idle: t('printers.status.idle'),
error: t('printers.status.problem'),
offline: t('printers.status.offline'),
};
diff --git a/frontend/src/components/Collapsible.tsx b/frontend/src/components/Collapsible.tsx
index e19a0558f..37f4c1bc1 100644
--- a/frontend/src/components/Collapsible.tsx
+++ b/frontend/src/components/Collapsible.tsx
@@ -8,12 +8,21 @@ interface CollapsibleProps {
defaultOpen?: boolean;
className?: string;
summaryClassName?: string;
+ /** When provided, the component is controlled — parent owns the open state. */
+ open?: boolean;
+ /** Called when the user clicks the toggle. Use with `open` for controlled mode. */
+ onToggle?: (open: boolean) => void;
}
/**
- * Lightweight disclosure used for densifying the Settings page.
- * Renders a clickable summary row and animates open/close via a simple
- * display swap (no height animation — keeps it snappy and layout-stable).
+ * Lightweight disclosure widget.
+ * Renders a clickable summary row and conditionally displays children.
+ *
+ * The toggle region is a plain
with role="button" so that the summary
+ * slot may safely contain interactive elements (buttons, links) without
+ * nesting a