mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-07-15 21:03:47 +00:00
fix: eslint error and format
This commit is contained in:
+53
-37
@@ -1,73 +1,83 @@
|
|||||||
import sharp from 'sharp';
|
import sharp from "sharp";
|
||||||
import { readFileSync, writeFileSync, mkdirSync } from 'fs';
|
import { readFileSync, writeFileSync, mkdirSync } from "fs";
|
||||||
import { join, dirname } from 'path';
|
import { join, dirname } from "path";
|
||||||
import { fileURLToPath } from 'url';
|
import { fileURLToPath } from "url";
|
||||||
|
|
||||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||||
const root = join(__dirname, '..');
|
const root = join(__dirname, "..");
|
||||||
const publicDir = join(root, 'public');
|
const publicDir = join(root, "public");
|
||||||
const iconsDir = join(publicDir, 'icons');
|
const iconsDir = join(publicDir, "icons");
|
||||||
|
|
||||||
mkdirSync(iconsDir, { recursive: true });
|
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];
|
const pngSizes = [16, 24, 32, 48, 64, 128, 256, 512, 1024];
|
||||||
|
|
||||||
console.log('Generating PNG icons...');
|
console.log("Generating PNG icons...");
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
pngSizes.map(size =>
|
pngSizes.map((size) =>
|
||||||
sharp(svgBuffer)
|
sharp(svgBuffer)
|
||||||
.resize(size, size)
|
.resize(size, size)
|
||||||
.png()
|
.png()
|
||||||
.toFile(join(iconsDir, `${size}x${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
|
// icon.png (1024x1024) for Linux electron-builder
|
||||||
await sharp(svgBuffer).resize(1024, 1024).png().toFile(join(publicDir, 'icon.png'));
|
await sharp(svgBuffer)
|
||||||
console.log(' ✓ icon.png');
|
.resize(1024, 1024)
|
||||||
|
.png()
|
||||||
|
.toFile(join(publicDir, "icon.png"));
|
||||||
|
console.log(" ✓ icon.png");
|
||||||
|
|
||||||
// icon-mac.png (512x512) for macOS
|
// icon-mac.png (512x512) for macOS
|
||||||
await sharp(svgBuffer).resize(512, 512).png().toFile(join(publicDir, 'icon-mac.png'));
|
await sharp(svgBuffer)
|
||||||
console.log(' ✓ icon-mac.png');
|
.resize(512, 512)
|
||||||
|
.png()
|
||||||
|
.toFile(join(publicDir, "icon-mac.png"));
|
||||||
|
console.log(" ✓ icon-mac.png");
|
||||||
|
|
||||||
// full-icon.png (1024x1024) used in app UI
|
// full-icon.png (1024x1024) used in app UI
|
||||||
await sharp(svgBuffer).resize(1024, 1024).png().toFile(join(publicDir, 'full-icon.png'));
|
await sharp(svgBuffer)
|
||||||
console.log(' ✓ full-icon.png');
|
.resize(1024, 1024)
|
||||||
|
.png()
|
||||||
|
.toFile(join(publicDir, "full-icon.png"));
|
||||||
|
console.log(" ✓ full-icon.png");
|
||||||
|
|
||||||
// favicon.ico — embed 16, 32, 48 px layers
|
// favicon.ico — embed 16, 32, 48 px layers
|
||||||
console.log('Generating favicon.ico...');
|
console.log("Generating favicon.ico...");
|
||||||
const icoSizes = [16, 32, 48];
|
const icoSizes = [16, 32, 48];
|
||||||
const icoBuffers = await Promise.all(
|
const icoBuffers = await Promise.all(
|
||||||
icoSizes.map(size =>
|
icoSizes.map((size) => sharp(svgBuffer).resize(size, size).png().toBuffer()),
|
||||||
sharp(svgBuffer).resize(size, size).png().toBuffer()
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
writeFileSync(join(publicDir, 'favicon.ico'), buildIco(icoBuffers, icoSizes));
|
writeFileSync(join(publicDir, "favicon.ico"), buildIco(icoBuffers, icoSizes));
|
||||||
console.log(' ✓ favicon.ico');
|
console.log(" ✓ favicon.ico");
|
||||||
|
|
||||||
// icon.ico — embed 16, 32, 48, 64, 128, 256 px layers
|
// 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 winSizes = [16, 32, 48, 64, 128, 256];
|
||||||
const winBuffers = await Promise.all(
|
const winBuffers = await Promise.all(
|
||||||
winSizes.map(size =>
|
winSizes.map((size) => sharp(svgBuffer).resize(size, size).png().toBuffer()),
|
||||||
sharp(svgBuffer).resize(size, size).png().toBuffer()
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
writeFileSync(join(publicDir, 'icon.ico'), buildIco(winBuffers, winSizes));
|
writeFileSync(join(publicDir, "icon.ico"), buildIco(winBuffers, winSizes));
|
||||||
console.log(' ✓ icon.ico');
|
console.log(" ✓ icon.ico");
|
||||||
|
|
||||||
// icons/icon.ico and icons/icon.icns placeholders (stubs pointing to source)
|
// 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
|
// 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
|
// Copy icon.ico and icon.icns into icons/ as well
|
||||||
import { copyFileSync } from 'fs';
|
import { copyFileSync } from "fs";
|
||||||
copyFileSync(join(publicDir, 'icon.ico'), join(iconsDir, 'icon.ico'));
|
copyFileSync(join(publicDir, "icon.ico"), join(iconsDir, "icon.ico"));
|
||||||
console.log(' ✓ icons/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.
|
* Builds a minimal ICO file from PNG buffers.
|
||||||
@@ -84,7 +94,13 @@ function buildIco(pngBuffers, sizes) {
|
|||||||
let offset = dirSize;
|
let offset = dirSize;
|
||||||
const entries = pngBuffers.map((buf, i) => {
|
const entries = pngBuffers.map((buf, i) => {
|
||||||
const size = sizes[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;
|
offset += buf.length;
|
||||||
return entry;
|
return entry;
|
||||||
});
|
});
|
||||||
@@ -111,7 +127,7 @@ function buildIco(pngBuffers, sizes) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Image data
|
// Image data
|
||||||
entries.forEach(e => e.buf.copy(ico, e.offset));
|
entries.forEach((e) => e.buf.copy(ico, e.offset));
|
||||||
|
|
||||||
return ico;
|
return ico;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
export interface KbdProps extends React.HTMLAttributes<HTMLElement> {}
|
export type KbdProps = React.HTMLAttributes<HTMLElement>;
|
||||||
|
|
||||||
const Kbd = React.forwardRef<HTMLElement, KbdProps>(
|
const Kbd = React.forwardRef<HTMLElement, KbdProps>(
|
||||||
({ className, ...props }, ref) => {
|
({ className, ...props }, ref) => {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import {
|
|||||||
Activity,
|
Activity,
|
||||||
ArrowLeft,
|
ArrowLeft,
|
||||||
Box,
|
Box,
|
||||||
Info,
|
|
||||||
List,
|
List,
|
||||||
Settings,
|
Settings,
|
||||||
Terminal,
|
Terminal,
|
||||||
|
|||||||
@@ -13,15 +13,11 @@ import {
|
|||||||
Settings,
|
Settings,
|
||||||
Download,
|
Download,
|
||||||
Upload,
|
Upload,
|
||||||
ChevronLeft,
|
|
||||||
ChevronRight,
|
|
||||||
RefreshCw,
|
|
||||||
ArrowUp,
|
ArrowUp,
|
||||||
ArrowDown,
|
ArrowDown,
|
||||||
FileSymlink,
|
FileSymlink,
|
||||||
Move,
|
Move,
|
||||||
GitCompare,
|
GitCompare,
|
||||||
Edit,
|
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import type { FileItem } from "@/types/index";
|
import type { FileItem } from "@/types/index";
|
||||||
|
|||||||
@@ -1,26 +1,16 @@
|
|||||||
import React, { useCallback, useEffect, useState } from "react";
|
import React, { useCallback, useEffect, useState } from "react";
|
||||||
import { Button } from "@/components/button";
|
import { Button } from "@/components/button";
|
||||||
import { Card } from "@/components/card";
|
import { Card } from "@/components/card";
|
||||||
import { Input } from "@/components/input";
|
|
||||||
import { Separator } from "@/components/separator";
|
import { Separator } from "@/components/separator";
|
||||||
import {
|
|
||||||
Dialog,
|
|
||||||
DialogContent,
|
|
||||||
DialogDescription,
|
|
||||||
DialogFooter,
|
|
||||||
DialogHeader,
|
|
||||||
DialogTitle,
|
|
||||||
} from "@/components/dialog";
|
|
||||||
import {
|
import {
|
||||||
AlertCircle,
|
AlertCircle,
|
||||||
Clock,
|
Clock,
|
||||||
Network,
|
Network,
|
||||||
Play,
|
Play,
|
||||||
Plus,
|
|
||||||
RefreshCw,
|
RefreshCw,
|
||||||
Settings,
|
Settings,
|
||||||
Square,
|
Square,
|
||||||
Trash2,
|
|
||||||
Wifi,
|
Wifi,
|
||||||
WifiOff,
|
WifiOff,
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
|
|||||||
@@ -58,7 +58,6 @@ function useSplitSizes(splitMode: SplitMode) {
|
|||||||
const d = defaultSizes(splitMode);
|
const d = defaultSizes(splitMode);
|
||||||
setRowSizes(d.rowSizes);
|
setRowSizes(d.rowSizes);
|
||||||
setRowColSizes(d.rowColSizes);
|
setRowColSizes(d.rowColSizes);
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
||||||
}, [splitMode]);
|
}, [splitMode]);
|
||||||
|
|
||||||
function reset() {
|
function reset() {
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import { Separator } from "@/components/separator";
|
|||||||
import {
|
import {
|
||||||
DropdownMenu,
|
DropdownMenu,
|
||||||
DropdownMenuContent,
|
DropdownMenuContent,
|
||||||
DropdownMenuItem,
|
|
||||||
DropdownMenuTrigger,
|
DropdownMenuTrigger,
|
||||||
} from "@/components/dropdown-menu";
|
} from "@/components/dropdown-menu";
|
||||||
import { ChevronDown, ChevronUp, X } from "lucide-react";
|
import { ChevronDown, ChevronUp, X } from "lucide-react";
|
||||||
|
|||||||
Reference in New Issue
Block a user