From 93c588b23969fd5cb7e3659e5ae76ae411fb8ccd Mon Sep 17 00:00:00 2001 From: Siddharth Kumar Sah Date: Tue, 14 Apr 2026 22:15:37 +0800 Subject: [PATCH] fix(lint): resolve all biome warnings across API, web, and image-engine API: - Replace string concatenation with template literals (batch, pipeline, tool-factory, content-aware-resize, passport-photo, remove-background) - Remove unused imports (teams, color-adjustments, image-enhancement) - Replace non-null assertions with guard clauses in bg-effects and stitch - Use optional chaining in docs route Image-engine: - Remove unused OutputFormat imports (compress, convert) - Use local variables instead of reassigning parameters (optimize-for-web, sharpen) Web: - Fix useExhaustiveDependencies: remove genuinely redundant deps, add biome-ignore comments for intentional patterns (src prop, cleanup fns) - Replace non-null assertions with null-safe alternatives - Add accessible titles to inline SVGs (color-settings, image-enhancement-settings) - Fix noLabelWithoutControl: associate labels via htmlFor/id or use (image-to-base64-settings, edit-metadata-settings, qr-generate-settings) - Replace div[role="button"] with ) : (
diff --git a/apps/web/src/components/tools/pipeline-builder.tsx b/apps/web/src/components/tools/pipeline-builder.tsx index bc4ca1e8..9c895138 100644 --- a/apps/web/src/components/tools/pipeline-builder.tsx +++ b/apps/web/src/components/tools/pipeline-builder.tsx @@ -95,15 +95,18 @@ function SortableStep({ className="flex items-center gap-2 p-3 w-full text-left" > {/* Drag handle */} - e.stopPropagation()} - onKeyDown={(e) => e.stopPropagation()} - > - - + { + // biome-ignore lint/a11y/noStaticElementInteractions: dnd-kit drag handle spreads its own event handlers + e.stopPropagation()} + onKeyDown={(e) => e.stopPropagation()} + > + + + } {/* Step number badge */} @@ -122,27 +125,18 @@ function SortableStep({ {/* Remove button */} - { e.stopPropagation(); onRemove(); }} - onKeyDown={(e) => { - if (e.key === "Enter" || e.key === " ") { - e.stopPropagation(); - onRemove(); - } - }} title="Remove" className="p-1 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive" > - + - - {/* Inline settings panel */}
+ ;
); } diff --git a/apps/web/src/components/tools/qr-generate-preview.tsx b/apps/web/src/components/tools/qr-generate-preview.tsx index d09d90d1..487c7d07 100644 --- a/apps/web/src/components/tools/qr-generate-preview.tsx +++ b/apps/web/src/components/tools/qr-generate-preview.tsx @@ -92,6 +92,7 @@ export function QrGeneratePreview() { ]); // Create QR instance on mount + // biome-ignore lint/correctness/useExhaustiveDependencies: options is intentionally excluded to only create QR instance once on mount useEffect(() => { const qr = new QRCodeStyling(options as never); qrRef.current = qr; @@ -99,7 +100,7 @@ export function QrGeneratePreview() { clearChildren(containerRef.current); qr.append(containerRef.current); } - }, []); // eslint-disable-line react-hooks/exhaustive-deps + }, []); // Update QR on state changes (debounced) useEffect(() => { diff --git a/apps/web/src/components/tools/qr-generate-settings.tsx b/apps/web/src/components/tools/qr-generate-settings.tsx index 7a835f48..b2ddd42b 100644 --- a/apps/web/src/components/tools/qr-generate-settings.tsx +++ b/apps/web/src/components/tools/qr-generate-settings.tsx @@ -80,8 +80,11 @@ function UrlForm() { const { textData, setTextData } = useQrStore(); return (
- + setTextData(e.target.value)} @@ -97,8 +100,11 @@ function TextForm() { const { textData, setTextData } = useQrStore(); return (
- +