refactor: isolate old and preview versions, add lint rule

This commit is contained in:
2026-09-05 19:41:31 +05:00
parent e662d1df24
commit e57faddfde
10 changed files with 515 additions and 42 deletions
+184
View File
@@ -0,0 +1,184 @@
import {
AppWindow,
Binary,
Blend,
CalendarDays,
ClipboardPaste,
Circle,
Contrast,
Crop,
Crosshair,
Dices,
Droplet,
Droplets,
Eye,
FileImage,
FileOutput,
FilePlus2,
Film,
FlipHorizontal2,
Focus,
Frame,
Grid3x3,
Hammer,
Hash,
Image as ImageIcon,
Info,
Layers,
Link2,
Maximize2,
Minimize2,
Moon,
PaintBucket,
Palette,
Rainbow,
Repeat2,
RotateCw,
Ruler,
Scaling,
Scan,
Scissors,
SearchCheck,
FaceSlightlySmiling,
Square,
Stamp,
Star,
Sun,
Type,
WavesHorizontal,
ZoomIn,
ZoomOut,
} from "@lucide/svelte";
export const TOOL_ICONS: Record<string, typeof AppWindow> = {
"resize-png": Scaling,
"crop-png": Crop,
"rotate-png": RotateCw,
"flip-png": FlipHorizontal2,
"grayscale-png": Contrast,
"invert-colors-png": Blend,
"adjust-brightness-contrast-png": Sun,
"convert-png-to-jpg": FileImage,
"convert-png-to-webp": FileImage,
"remove-color-from-png": Scissors,
"png-info": Info,
"jpg-to-png": FileImage,
"webp-to-png": FileImage,
"gif-to-png": Film,
"bmp-to-png": FileImage,
"ico-to-png": AppWindow,
"png-to-bmp": FileOutput,
"png-to-base64": Binary,
"base64-to-png": ClipboardPaste,
"png-to-data-uri": Link2,
"data-uri-to-png": ClipboardPaste,
"png-to-hex": Hash,
"hex-to-png": Hash,
"change-png-opacity": Droplet,
"sepia-png": Palette,
"change-png-hue": Rainbow,
"extract-channel-png": Layers,
"swap-channels-png": Repeat2,
"black-and-white-png": Contrast,
"posterize-png": Layers,
"two-colors-png": Blend,
"invert-alpha-png": Droplets,
"remove-alpha-channel-png": Square,
"set-alpha-channel-png": Droplet,
"extract-alpha-mask-png": Layers,
"round-corners-png": Frame,
"add-padding-png": Maximize2,
"add-border-png": Frame,
"fit-on-background-png": ImageIcon,
"tile-png": Grid3x3,
"center-by-alpha-png": Crosshair,
"create-empty-png": FilePlus2,
"single-color-png": PaintBucket,
"random-noise-png": Dices,
"linear-gradient-png": Sun,
"png-is-grayscale": SearchCheck,
"png-is-transparent": Eye,
"png-orientation": Ruler,
"blur-png": Droplets,
"sharpen-png": Focus,
"remove-background-png": Scissors,
"add-stroke-png": Square,
"add-text-png": Type,
"date-stamp-png": CalendarDays,
"png-to-hsl": Blend,
"png-to-hsv": Droplet,
"png-to-hsi": Focus,
"png-to-cmyk": PaintBucket,
"png-to-ycbcr": Layers,
"png-to-lab": Ruler,
"show-transparent-png": Eye,
"show-grayscale-pixels-png": Contrast,
"show-color-pixels-png": Rainbow,
"light-pixel-mask-png": Sun,
"dark-pixel-mask-png": Moon,
"unique-color-mask-png": Dices,
"extract-color-from-png": Focus,
"quantize-png": Contrast,
"decrease-color-count-png": Scaling,
"custom-palette-png": Palette,
"dithering-png": Dices,
"feather-edges-png": Droplets,
"clean-edges-png": Scissors,
"pixelate-png": Grid3x3,
"randomize-pixels-png": Dices,
"add-noise-png": Hash,
"silhouette-png": Contrast,
"trim-empty-space-png": Crop,
"change-canvas-size-png": Frame,
"change-aspect-ratio-png": Scaling,
"swap-orientation-png": RotateCw,
"symmetric-copy-png": FlipHorizontal2,
"compress-png": Minimize2,
"reduce-to-size-png": Scaling,
"png-file-size": Info,
"png-to-bytes": Binary,
"bytes-to-png": Binary,
"png-to-rgb-values": Hash,
"rgb-values-to-png": Hash,
"verify-is-png": SearchCheck,
"text-to-png": Type,
"emoji-to-png": FaceSlightlySmiling,
"placeholder-png": Frame,
"color-spectrum-png": Rainbow,
"random-colors-png": Dices,
"draw-grid-png": Grid3x3,
"circle-mask-png": Circle,
"square-mask-png": Square,
"star-mask-png": Star,
"wavy-mask-png": WavesHorizontal,
"watermark-tile-png": Stamp,
"watermark-image-png": FileImage,
"color-wheel-png": Rainbow,
"complementary-png": Contrast,
"triadic-png": Hash,
"tetradic-png": Grid3x3,
"analogous-png": Blend,
"monochromatic-png": Droplets,
"shades-png": Sun,
"mix-colors-png": PaintBucket,
"blend-two-png": Layers,
"step-colors-png": Scaling,
"sort-colors-png": SearchCheck,
"find-contour-png": Scan,
"make-thicker-png": ZoomIn,
"make-thinner-png": ZoomOut,
"harden-alpha-png": Sun,
"despeckle-alpha-png": SearchCheck,
"close-holes-png": Hammer,
"skew-png": Repeat2,
"rotate-free-png": RotateCw,
"zoom-png": ZoomIn,
"shift-png": Crosshair,
"vignette-png": Sun,
"jpeg-artifacts-png": Layers,
"gamma-png": Contrast,
"auto-contrast-png": Contrast,
"temperature-png": Sun,
"tint-png": Droplet,
"svg-to-png": FileImage,
};
+1 -3
View File
@@ -1,5 +1,4 @@
import type { CategoryId } from "./categories";
import type { ToolSchema } from "./registry-schema";
import type { CategoryId } from "./categories";
import type { OutputMime } from "./core/io";
import type { PixelImage } from "./core/types";
@@ -63,7 +62,6 @@ export type ToolEntry<P = Record<string, unknown>> = {
category: CategoryId;
sourceMode?: SourceMode;
params: ParamDef[];
schema?: ToolSchema<P>;
run?: (img: PixelImage, params: P) => Promise<PixelImage> | PixelImage;
generate?: (params: P) => Promise<PixelImage> | PixelImage;
toText?: (img: PixelImage, params: P) => Promise<string> | string;
-12
View File
@@ -1,6 +1,5 @@
import type { ToolEntry } from "../registry";
import { ToolError } from "../core/errors";
import { field, toolSchema } from "../registry-schema";
import {
colorMask,
extractAlphaMask,
@@ -33,16 +32,6 @@ import {
import type { Position9 } from "../core/textdraw";
import { num, str } from "../registry-helpers";
interface AddStrokeParams {
color: string;
thickness: number;
}
const addStrokeSchema = toolSchema<AddStrokeParams>({
color: field.color({ default: "#ff0000" }),
thickness: field.slider({ min: 1, max: 10, step: 1, default: 3 }),
});
export function alphaEntries(): ToolEntry[] {
return [
{
@@ -412,7 +401,6 @@ export function alphaEntries(): ToolEntry[] {
description:
"Adds a colored ring outline around the opaque content with the chosen thickness.",
category: "alpha",
schema: addStrokeSchema,
params: [
{
id: "color",
-12
View File
@@ -1,6 +1,5 @@
import type { ToolEntry } from "../registry";
import { ToolError } from "../core/errors";
import { field, toolSchema } from "../registry-schema";
import {
crop,
expandCanvas,
@@ -25,16 +24,6 @@ import {
} from "../core/affine";
import { num, str } from "../registry-helpers";
interface AddBorderParams {
thickness: number;
color: string;
}
const addBorderSchema = toolSchema<AddBorderParams>({
thickness: field.number({ min: 1, max: 500, step: 1, default: 5 }),
color: field.color({ default: "#000000" }),
});
export function geometryEntries(): ToolEntry[] {
return [
{
@@ -241,7 +230,6 @@ export function geometryEntries(): ToolEntry[] {
description:
"Draws a colored frame of the chosen thickness around the image.",
category: "geometry",
schema: addBorderSchema,
params: [
{
id: "thickness",
@@ -1,6 +1,6 @@
<script lang="ts">
import { PREVIEW_GROUPS, PREVIEW_TOTAL } from "$lib/preview/catalog";
import { TOOL_ICONS } from "$lib/tools/tool-icons";
import { TOOL_ICONS } from "$lib/preview/tool-icons";
import CatalogHeader from "$lib/components/kit/CatalogHeader.svelte";
import CatalogToolbar from "$lib/components/kit/CatalogToolbar.svelte";
import CatalogGroup from "$lib/components/kit/CatalogGroup.svelte";