import { lazy, Suspense } from "react"; type ControlProps = { settings: Record; onChange: (settings: Record) => void; }; // Lazy-load every control so these modules are not pulled into the main bundle. // The pipeline builder wraps this component in so each control // loads on demand when the user selects a step in the pipeline. const CONTROLS: Record>> = { resize: lazy(() => import("./resize-settings").then((m) => ({ default: m.ResizeControls }))), crop: lazy(() => import("./crop-settings").then((m) => ({ default: m.CropControls }))), rotate: lazy(() => import("./rotate-settings").then((m) => ({ default: m.RotateControls }))), convert: lazy(() => import("./convert-settings").then((m) => ({ default: m.ConvertControls }))), compress: lazy(() => import("./compress-settings").then((m) => ({ default: m.CompressControls })), ), "strip-metadata": lazy(() => import("./strip-metadata-settings").then((m) => ({ default: m.StripMetadataControls })), ), border: lazy(() => import("./border-settings").then((m) => ({ default: m.BorderControls }))), "watermark-text": lazy(() => import("./watermark-text-settings").then((m) => ({ default: m.WatermarkTextControls })), ), "text-overlay": lazy(() => import("./text-overlay-settings").then((m) => ({ default: m.TextOverlayControls })), ), "replace-color": lazy(() => import("./replace-color-settings").then((m) => ({ default: m.ReplaceColorControls })), ), "smart-crop": lazy(() => import("./smart-crop-settings").then((m) => ({ default: m.SmartCropControls })), ), "gif-tools": lazy(() => import("./gif-tools-settings").then((m) => ({ default: m.GifToolsControls })), ), upscale: lazy(() => import("./upscale-settings").then((m) => ({ default: m.UpscaleControls }))), "blur-faces": lazy(() => import("./blur-faces-settings").then((m) => ({ default: m.BlurFacesControls })), ), "enhance-faces": lazy(() => import("./enhance-faces-settings").then((m) => ({ default: m.EnhanceFacesControls })), ), "remove-background": lazy(() => import("./remove-bg-settings").then((m) => ({ default: m.RemoveBgControls })), ), "noise-removal": lazy(() => import("./noise-removal-settings").then((m) => ({ default: m.NoiseRemovalControls })), ), }; const COLOR_TOOL_IDS = new Set(["adjust-colors"]); // ColorControls needs an extra toolId prop so it lives outside the shared map. const LazyColorControls = lazy(() => import("./color-settings").then((m) => ({ default: m.ColorControls })), ); interface PipelineStepSettingsProps { toolId: string; settings: Record; onChange: (settings: Record) => void; } export function PipelineStepSettings({ toolId, settings, onChange }: PipelineStepSettingsProps) { const Control = CONTROLS[toolId]; if (Control) { return ( ); } if (COLOR_TOOL_IDS.has(toolId)) { return ( ); } return (

No configurable settings. Defaults will be used.

); }