Files
SnapOtter/apps/web/src/lib/tool-display-modes.ts
T
SnapOtterandGitHub 4ec39c556f test: testing overhaul -- CI e2e gates, parallel suites, generated matrices, mutation testing (#215)
Closes the "e2e never runs in CI" hole. Adds per-PR e2e smoke gate,
nightly full-suite workflows, parallel vitest forks (per-fork DBs),
Playwright parallel/serial/visual projects against production builds,
metadata-generated test suites (drift guards, hostile inputs, format
matrix, pairwise settings, property-based fuzz), Stryker mutation
testing, Schemathesis API fuzz, coverage ratchet, and fixes for three
session-poisoning bugs that caused 200+ serial-bucket failures.

Bug fix included: favicon/split/bulk-rename could hang clients forever
when ZIP streaming failed after reply.hijack().
2026-06-10 22:01:13 +08:00

92 lines
2.5 KiB
TypeScript

/**
* Pure display-mode map: toolId -> DisplayMode.
*
* This module intentionally has no React imports so that Playwright specs and
* Node-side test generators can import it directly. It is the single source of
* truth for display modes; tool-registry.tsx merges it into registry entries.
*/
export type DisplayMode =
| "side-by-side"
| "before-after"
| "live-preview"
| "no-comparison"
| "interactive-crop"
| "interactive-eraser"
| "interactive-split"
| "no-dropzone"
| "custom-results";
export const TOOL_DISPLAY_MODES: Record<string, DisplayMode> = {
// Essentials
resize: "side-by-side",
crop: "interactive-crop",
rotate: "side-by-side",
convert: "no-comparison",
compress: "before-after",
"strip-metadata": "no-comparison",
"edit-metadata": "no-comparison",
// Color adjustments
"adjust-colors": "live-preview",
sharpening: "before-after",
// Watermark & overlay
"watermark-text": "before-after",
"watermark-image": "before-after",
"text-overlay": "before-after",
compose: "before-after",
"meme-generator": "no-dropzone",
// Utilities
info: "no-comparison",
compare: "before-after",
"find-duplicates": "custom-results",
"color-palette": "no-comparison",
"qr-generate": "no-dropzone",
"html-to-image": "no-dropzone",
"barcode-read": "before-after",
"image-to-base64": "custom-results",
// Layout & composition
collage: "no-dropzone",
stitch: "no-comparison",
split: "interactive-split",
border: "live-preview",
beautify: "live-preview",
// Format & conversion
"svg-to-raster": "before-after",
vectorize: "before-after",
"gif-tools": "before-after",
// Optimization extras
"bulk-rename": "before-after",
favicon: "before-after",
"image-to-pdf": "before-after",
"optimize-for-web": "before-after",
"pdf-to-image": "no-dropzone",
// Adjustments extra
"replace-color": "before-after",
"color-blindness": "before-after",
// AI tools
"remove-background": "before-after",
upscale: "before-after",
ocr: "before-after",
"blur-faces": "before-after",
"enhance-faces": "before-after",
"erase-object": "interactive-eraser",
"smart-crop": "before-after",
"image-enhancement": "before-after",
colorize: "before-after",
"noise-removal": "before-after",
"passport-photo": "custom-results",
"red-eye-removal": "before-after",
"restore-photo": "before-after",
"transparency-fixer": "before-after",
"content-aware-resize": "side-by-side",
"ai-canvas-expand": "before-after",
};