{/* Mode toggle: Quick grid vs Custom drag - only show for image stamps */}
{params.parameters.stampType === 'image' && (
)}
{params.parameters.stampType === 'image' && customPositionModeSelected && (
{t('customPosition', 'Drag the stamp to the desired location in the preview window.')}
)}
{/* Icon pill buttons row */}
{/* Single slider bound to selected pill */}
{(params.parameters as any)._activePill === 'fontSize' && (
{params.parameters.stampType === 'image'
? t('AddStampRequest.imageSize', 'Image Size')
: t('AddStampRequest.fontSize', 'Font Size')
}
params.updateParameter('fontSize', typeof v === 'number' ? v : 1)}
min={1}
max={400}
step={1}
size="sm"
className={styles.numberInput}
disabled={endpointLoading}
/>
params.updateParameter('fontSize', v as number)}
min={1}
max={400}
step={1}
className={styles.slider}
/>
)}
{(params.parameters as any)._activePill === 'rotation' && (
{t('AddStampRequest.rotation', 'Rotation')}
params.updateParameter('rotation', typeof v === 'number' ? v : 0)}
min={-180}
max={180}
step={1}
size="sm"
className={styles.numberInput}
hideControls
disabled={endpointLoading}
/>
params.updateParameter('rotation', v as number)}
min={-180}
max={180}
step={1}
className={styles.sliderWide}
/>
)}
{(params.parameters as any)._activePill === 'opacity' && (
{t('AddStampRequest.opacity', 'Opacity')}
params.updateParameter('opacity', typeof v === 'number' ? v : 0)}
min={0}
max={100}
step={1}
size="sm"
className={styles.numberInput}
disabled={endpointLoading}
/>
params.updateParameter('opacity', v as number)}
min={0}
max={100}
step={1}
className={styles.slider}
/>
)}
{params.parameters.stampType !== 'image' && (
params.updateParameter('customColor', value)}
format="hex"
disabled={endpointLoading}
/>
)}
{/* Unified preview; when in quick mode, overlay grid inside preview */}
),
});
return steps;
};
return createToolFlow({
files: {
selectedFiles,
isCollapsed: hasResults,
},
steps: getSteps(),
executeButton: {
text: t('AddStampRequest.submit', 'Add Stamp'),
isVisible: !hasResults,
loadingText: t('loading'),
onClick: handleExecute,
disabled: !params.validateParameters() || !hasFiles || !endpointEnabled,
},
review: {
isVisible: hasResults,
operation: operation,
title: t('AddStampRequest.results.title', 'Stamp Results'),
onFileClick: (file) => onPreviewFile?.(file),
onUndo: async () => {
await operation.undoOperation();
onPreviewFile?.(null);
},
},
forceStepNumbers: true,
});
};
AddStamp.tool = () => useAddStampOperation;
export default AddStamp as ToolComponent;