From 0efcb7de7e8e3fafc0f0e79cf124bcb78254ca8c Mon Sep 17 00:00:00 2001 From: LukeGus Date: Mon, 11 May 2026 13:19:55 -0500 Subject: [PATCH] fix: eslint error and format --- scripts/generate-icons.mjs | 112 ++++++++++-------- src/ui/components/kbd.tsx | 2 +- .../docker/components/ContainerDetail.tsx | 1 - .../features/file-manager/FileManagerGrid.tsx | 4 - src/ui/features/tunnel/TunnelTab.tsx | 12 +- src/ui/shell/SplitView.tsx | 1 - src/ui/shell/TabBar.tsx | 1 - 7 files changed, 66 insertions(+), 67 deletions(-) diff --git a/scripts/generate-icons.mjs b/scripts/generate-icons.mjs index 0930b78e..fac5e9f1 100644 --- a/scripts/generate-icons.mjs +++ b/scripts/generate-icons.mjs @@ -1,73 +1,83 @@ -import sharp from 'sharp'; -import { readFileSync, writeFileSync, mkdirSync } from 'fs'; -import { join, dirname } from 'path'; -import { fileURLToPath } from 'url'; +import sharp from "sharp"; +import { readFileSync, writeFileSync, mkdirSync } from "fs"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; const __dirname = dirname(fileURLToPath(import.meta.url)); -const root = join(__dirname, '..'); -const publicDir = join(root, 'public'); -const iconsDir = join(publicDir, 'icons'); +const root = join(__dirname, ".."); +const publicDir = join(root, "public"); +const iconsDir = join(publicDir, "icons"); mkdirSync(iconsDir, { recursive: true }); -const svgBuffer = readFileSync(join(publicDir, 'icon.svg')); +const svgBuffer = readFileSync(join(publicDir, "icon.svg")); const pngSizes = [16, 24, 32, 48, 64, 128, 256, 512, 1024]; -console.log('Generating PNG icons...'); +console.log("Generating PNG icons..."); await Promise.all( - pngSizes.map(size => + pngSizes.map((size) => sharp(svgBuffer) .resize(size, size) .png() .toFile(join(iconsDir, `${size}x${size}.png`)) - .then(() => console.log(` ✓ icons/${size}x${size}.png`)) - ) + .then(() => console.log(` ✓ icons/${size}x${size}.png`)), + ), ); // icon.png (1024x1024) for Linux electron-builder -await sharp(svgBuffer).resize(1024, 1024).png().toFile(join(publicDir, 'icon.png')); -console.log(' ✓ icon.png'); +await sharp(svgBuffer) + .resize(1024, 1024) + .png() + .toFile(join(publicDir, "icon.png")); +console.log(" ✓ icon.png"); // icon-mac.png (512x512) for macOS -await sharp(svgBuffer).resize(512, 512).png().toFile(join(publicDir, 'icon-mac.png')); -console.log(' ✓ icon-mac.png'); +await sharp(svgBuffer) + .resize(512, 512) + .png() + .toFile(join(publicDir, "icon-mac.png")); +console.log(" ✓ icon-mac.png"); // full-icon.png (1024x1024) used in app UI -await sharp(svgBuffer).resize(1024, 1024).png().toFile(join(publicDir, 'full-icon.png')); -console.log(' ✓ full-icon.png'); +await sharp(svgBuffer) + .resize(1024, 1024) + .png() + .toFile(join(publicDir, "full-icon.png")); +console.log(" ✓ full-icon.png"); // favicon.ico — embed 16, 32, 48 px layers -console.log('Generating favicon.ico...'); +console.log("Generating favicon.ico..."); const icoSizes = [16, 32, 48]; const icoBuffers = await Promise.all( - icoSizes.map(size => - sharp(svgBuffer).resize(size, size).png().toBuffer() - ) + icoSizes.map((size) => sharp(svgBuffer).resize(size, size).png().toBuffer()), ); -writeFileSync(join(publicDir, 'favicon.ico'), buildIco(icoBuffers, icoSizes)); -console.log(' ✓ favicon.ico'); +writeFileSync(join(publicDir, "favicon.ico"), buildIco(icoBuffers, icoSizes)); +console.log(" ✓ favicon.ico"); // icon.ico — embed 16, 32, 48, 64, 128, 256 px layers -console.log('Generating icon.ico...'); +console.log("Generating icon.ico..."); const winSizes = [16, 32, 48, 64, 128, 256]; const winBuffers = await Promise.all( - winSizes.map(size => - sharp(svgBuffer).resize(size, size).png().toBuffer() - ) + winSizes.map((size) => sharp(svgBuffer).resize(size, size).png().toBuffer()), ); -writeFileSync(join(publicDir, 'icon.ico'), buildIco(winBuffers, winSizes)); -console.log(' ✓ icon.ico'); +writeFileSync(join(publicDir, "icon.ico"), buildIco(winBuffers, winSizes)); +console.log(" ✓ icon.ico"); // icons/icon.ico and icons/icon.icns placeholders (stubs pointing to source) // electron-builder generates .icns; copy the 1024 PNG as icons/icon.png for reference -await sharp(svgBuffer).resize(1024, 1024).png().toFile(join(iconsDir, 'icon.ico').replace('icon.ico', '1024x1024.png')); +await sharp(svgBuffer) + .resize(1024, 1024) + .png() + .toFile(join(iconsDir, "icon.ico").replace("icon.ico", "1024x1024.png")); // Copy icon.ico and icon.icns into icons/ as well -import { copyFileSync } from 'fs'; -copyFileSync(join(publicDir, 'icon.ico'), join(iconsDir, 'icon.ico')); -console.log(' ✓ icons/icon.ico'); +import { copyFileSync } from "fs"; +copyFileSync(join(publicDir, "icon.ico"), join(iconsDir, "icon.ico")); +console.log(" ✓ icons/icon.ico"); -console.log('\nDone! Note: icon.icns requires macOS tools (iconutil). Use electron-builder on macOS to generate it.'); +console.log( + "\nDone! Note: icon.icns requires macOS tools (iconutil). Use electron-builder on macOS to generate it.", +); /** * Builds a minimal ICO file from PNG buffers. @@ -84,7 +94,13 @@ function buildIco(pngBuffers, sizes) { let offset = dirSize; const entries = pngBuffers.map((buf, i) => { const size = sizes[i]; - const entry = { size, width: size > 255 ? 0 : size, height: size > 255 ? 0 : size, buf, offset }; + const entry = { + size, + width: size > 255 ? 0 : size, + height: size > 255 ? 0 : size, + buf, + offset, + }; offset += buf.length; return entry; }); @@ -93,25 +109,25 @@ function buildIco(pngBuffers, sizes) { const ico = Buffer.alloc(totalSize); // ICO header - ico.writeUInt16LE(0, 0); // reserved - ico.writeUInt16LE(1, 2); // type: 1 = ICO - ico.writeUInt16LE(count, 4); // image count + ico.writeUInt16LE(0, 0); // reserved + ico.writeUInt16LE(1, 2); // type: 1 = ICO + ico.writeUInt16LE(count, 4); // image count // Directory entries entries.forEach((e, i) => { const base = headerSize + i * dirEntrySize; - ico.writeUInt8(e.width, base); // width (0 = 256) - ico.writeUInt8(e.height, base + 1); // height (0 = 256) - ico.writeUInt8(0, base + 2); // color count - ico.writeUInt8(0, base + 3); // reserved - ico.writeUInt16LE(1, base + 4); // planes - ico.writeUInt16LE(32, base + 6); // bit count - ico.writeUInt32LE(e.buf.length, base + 8); // size of image data - ico.writeUInt32LE(e.offset, base + 12); // offset of image data + ico.writeUInt8(e.width, base); // width (0 = 256) + ico.writeUInt8(e.height, base + 1); // height (0 = 256) + ico.writeUInt8(0, base + 2); // color count + ico.writeUInt8(0, base + 3); // reserved + ico.writeUInt16LE(1, base + 4); // planes + ico.writeUInt16LE(32, base + 6); // bit count + ico.writeUInt32LE(e.buf.length, base + 8); // size of image data + ico.writeUInt32LE(e.offset, base + 12); // offset of image data }); // Image data - entries.forEach(e => e.buf.copy(ico, e.offset)); + entries.forEach((e) => e.buf.copy(ico, e.offset)); return ico; } diff --git a/src/ui/components/kbd.tsx b/src/ui/components/kbd.tsx index bd172665..c1cb3361 100644 --- a/src/ui/components/kbd.tsx +++ b/src/ui/components/kbd.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { cn } from "@/lib/utils"; -export interface KbdProps extends React.HTMLAttributes {} +export type KbdProps = React.HTMLAttributes; const Kbd = React.forwardRef( ({ className, ...props }, ref) => { diff --git a/src/ui/features/docker/components/ContainerDetail.tsx b/src/ui/features/docker/components/ContainerDetail.tsx index 39786c00..30a8847b 100644 --- a/src/ui/features/docker/components/ContainerDetail.tsx +++ b/src/ui/features/docker/components/ContainerDetail.tsx @@ -6,7 +6,6 @@ import { Activity, ArrowLeft, Box, - Info, List, Settings, Terminal, diff --git a/src/ui/features/file-manager/FileManagerGrid.tsx b/src/ui/features/file-manager/FileManagerGrid.tsx index 5f0db67a..7f5d045f 100644 --- a/src/ui/features/file-manager/FileManagerGrid.tsx +++ b/src/ui/features/file-manager/FileManagerGrid.tsx @@ -13,15 +13,11 @@ import { Settings, Download, Upload, - ChevronLeft, - ChevronRight, - RefreshCw, ArrowUp, ArrowDown, FileSymlink, Move, GitCompare, - Edit, } from "lucide-react"; import { useTranslation } from "react-i18next"; import type { FileItem } from "@/types/index"; diff --git a/src/ui/features/tunnel/TunnelTab.tsx b/src/ui/features/tunnel/TunnelTab.tsx index 5d6879b7..97558abb 100644 --- a/src/ui/features/tunnel/TunnelTab.tsx +++ b/src/ui/features/tunnel/TunnelTab.tsx @@ -1,26 +1,16 @@ import React, { useCallback, useEffect, useState } from "react"; import { Button } from "@/components/button"; import { Card } from "@/components/card"; -import { Input } from "@/components/input"; import { Separator } from "@/components/separator"; -import { - Dialog, - DialogContent, - DialogDescription, - DialogFooter, - DialogHeader, - DialogTitle, -} from "@/components/dialog"; + import { AlertCircle, Clock, Network, Play, - Plus, RefreshCw, Settings, Square, - Trash2, Wifi, WifiOff, } from "lucide-react"; diff --git a/src/ui/shell/SplitView.tsx b/src/ui/shell/SplitView.tsx index ed5ee89b..2e8a95d7 100644 --- a/src/ui/shell/SplitView.tsx +++ b/src/ui/shell/SplitView.tsx @@ -58,7 +58,6 @@ function useSplitSizes(splitMode: SplitMode) { const d = defaultSizes(splitMode); setRowSizes(d.rowSizes); setRowColSizes(d.rowColSizes); - // eslint-disable-next-line react-hooks/exhaustive-deps }, [splitMode]); function reset() { diff --git a/src/ui/shell/TabBar.tsx b/src/ui/shell/TabBar.tsx index 21591359..8b4f7501 100644 --- a/src/ui/shell/TabBar.tsx +++ b/src/ui/shell/TabBar.tsx @@ -4,7 +4,6 @@ import { Separator } from "@/components/separator"; import { DropdownMenu, DropdownMenuContent, - DropdownMenuItem, DropdownMenuTrigger, } from "@/components/dropdown-menu"; import { ChevronDown, ChevronUp, X } from "lucide-react";