First implementation of Plimi
This commit is contained in:
67
src/tools/image-optimizer/index.ts
Normal file
67
src/tools/image-optimizer/index.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
import { lazy } from "react";
|
||||
import type { PlimiPlugin } from "../../core/plugins/plugin-types";
|
||||
import { runImageOptimizer } from "./run";
|
||||
|
||||
export interface ImageOptimizerOptions {
|
||||
quality: number;
|
||||
format: "image/jpeg" | "image/webp" | "image/png";
|
||||
}
|
||||
|
||||
// Lazy load the custom UI to keep the main bundle small
|
||||
const ImageOptimizerUi = lazy(() => import("./ImageOptimizerUi"));
|
||||
|
||||
export const imageOptimizerPlugin: PlimiPlugin<ImageOptimizerOptions> = {
|
||||
manifest: {
|
||||
id: "image-optimizer",
|
||||
name: "Image Optimizer",
|
||||
description:
|
||||
"Compress and convert images entirely in your browser using the Canvas API.",
|
||||
category: "image",
|
||||
version: "1.0.0",
|
||||
tags: ["image", "compress", "resize", "webp", "jpeg"],
|
||||
input: {
|
||||
type: "files",
|
||||
accept: ["image/jpeg", "image/png", "image/webp"],
|
||||
multiple: true,
|
||||
maxSizeMb: 20,
|
||||
},
|
||||
output: { type: "files" },
|
||||
offlineReady: true,
|
||||
},
|
||||
|
||||
optionsSchema: {
|
||||
fields: [
|
||||
{
|
||||
type: "slider",
|
||||
key: "quality",
|
||||
label: "Quality",
|
||||
defaultValue: 80,
|
||||
min: 1,
|
||||
max: 100,
|
||||
step: 1,
|
||||
},
|
||||
{
|
||||
type: "select",
|
||||
key: "format",
|
||||
label: "Output Format",
|
||||
defaultValue: "image/webp",
|
||||
options: [
|
||||
{ label: "WebP", value: "image/webp" },
|
||||
{ label: "JPEG", value: "image/jpeg" },
|
||||
{ label: "PNG", value: "image/png" },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
capabilities: {
|
||||
cancelable: false,
|
||||
worker: false,
|
||||
customUi: true,
|
||||
},
|
||||
|
||||
run: runImageOptimizer,
|
||||
|
||||
// Provide the custom UI
|
||||
customUi: ImageOptimizerUi,
|
||||
};
|
||||
Reference in New Issue
Block a user