124 lines
4.0 KiB
JavaScript
124 lines
4.0 KiB
JavaScript
import fs from "fs";
|
|
import path from "path";
|
|
import { fileURLToPath } from "url";
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const root = path.join(__dirname, "..");
|
|
const boldDir = path.join(root, "public/images/icons/vuesax/bold");
|
|
const iconsDir = path.join(root, "public/images/icons");
|
|
|
|
/** legacy filename -> vuesax bold filename (same folder) */
|
|
const LEGACY_MAP = {
|
|
"search-normal.svg": "search-normal.svg",
|
|
"candle.svg": "candle.svg",
|
|
"grid-3.svg": "grid-3.svg",
|
|
"sms.svg": "sms.svg",
|
|
"notification.svg": "notification.svg",
|
|
"send-msg.svg": "send-2.svg",
|
|
"select-img.svg": "gallery-add.svg",
|
|
"ruler&pen.svg": "ruler&pen.svg",
|
|
"weight.svg": "weight.svg",
|
|
"timer.svg": "timer.svg",
|
|
"location.svg": "location.svg",
|
|
"close-circle.svg": "close-circle.svg",
|
|
"gallery-add.svg": "gallery-add.svg",
|
|
"gallery-edit.svg": "gallery-edit.svg",
|
|
"medal-star.svg": "medal-star.svg",
|
|
"star1.svg": "star.svg",
|
|
"woman.svg": "woman.svg",
|
|
"man.svg": "man.svg",
|
|
"logout.svg": "logout.svg",
|
|
"copy.svg": "copy.svg",
|
|
"judge.svg": "judge.svg",
|
|
"danger.svg": "danger.svg",
|
|
"message-text.svg": "message-text.svg",
|
|
"share.svg": "share.svg",
|
|
"heart.svg": "heart.svg",
|
|
"sun.svg": "sun.svg",
|
|
"moon.svg": "moon.svg",
|
|
"edit.svg": "edit.svg",
|
|
"eye.svg": "eye.svg",
|
|
"add.svg": "add.svg",
|
|
"submit.svg": "tick-circle.svg",
|
|
"success.svg": "tick-circle.svg",
|
|
"failed.svg": "close-circle.svg",
|
|
"contact.svg": "call.svg",
|
|
"calendar.svg": "calendar.svg",
|
|
"arrow-down.svg": "arrow-down.svg",
|
|
"clock.svg": "clock.svg",
|
|
"verify.svg": "verify.svg",
|
|
"verify2.svg": "verify.svg",
|
|
"verify3.svg": "verify.svg",
|
|
"not-verify.svg": "info-circle.svg",
|
|
"academy.svg": "teacher.svg",
|
|
"services.svg": "box.svg",
|
|
"offer.svg": "ticket-star.svg",
|
|
"people.svg": "people.svg",
|
|
"phone.svg": "call.svg",
|
|
"mobile.svg": "mobile.svg",
|
|
"key.svg": "key.svg",
|
|
"flash-circle.svg": "flash.svg",
|
|
"shop-add.svg": "shop-add.svg",
|
|
"box.svg": "box.svg",
|
|
"wallet.svg": "wallet.svg",
|
|
"lifebuoy.svg": "lifebuoy.svg",
|
|
"teacher.svg": "teacher.svg",
|
|
"courthouse.svg": "building.svg",
|
|
"block-red.svg": "close-circle.svg",
|
|
"block-green.svg": "tick-circle.svg",
|
|
};
|
|
|
|
const CHAT_MAP = {
|
|
"timer.svg": "timer.svg",
|
|
"eye.svg": "eye.svg",
|
|
"attachment.svg": "link.svg",
|
|
"microphone-2.svg": "microphone-2.svg",
|
|
"send-2.svg": "send-2.svg",
|
|
"search-normal.svg": "search-normal.svg",
|
|
"trash.svg": "trash.svg",
|
|
"attachment-menu/camera.svg": "camera.svg",
|
|
"attachment-menu/gallery.svg": "gallery.svg",
|
|
"attachment-menu/video.svg": "video.svg",
|
|
"attachment-menu/file.svg": "folder-2.svg",
|
|
"attachment-menu/location.svg": "location.svg",
|
|
};
|
|
|
|
function normalizeSvg(content, fillOverride) {
|
|
let svg = content.replace(/#292D32/gi, fillOverride || "#292D32");
|
|
svg = svg.replace(/fill="#9A9A9A"/gi, `fill="${fillOverride || "#292D32"}"`);
|
|
svg = svg.replace(/stroke="#9A9A9A"/gi, `stroke="${fillOverride || "#292D32"}"`);
|
|
return svg;
|
|
}
|
|
|
|
function copyIcon(srcName, destPath, fillOverride) {
|
|
const srcPath = path.join(boldDir, srcName);
|
|
if (!fs.existsSync(srcPath)) {
|
|
console.warn(`SKIP missing: ${srcName} -> ${destPath}`);
|
|
return false;
|
|
}
|
|
const content = normalizeSvg(fs.readFileSync(srcPath, "utf8"), fillOverride);
|
|
fs.mkdirSync(path.dirname(destPath), { recursive: true });
|
|
fs.writeFileSync(destPath, content, "utf8");
|
|
return true;
|
|
}
|
|
|
|
let count = 0;
|
|
for (const [legacy, vuesax] of Object.entries(LEGACY_MAP)) {
|
|
const dest = path.join(iconsDir, legacy);
|
|
if (copyIcon(vuesax, dest)) count++;
|
|
}
|
|
|
|
// red heart variant
|
|
copyIcon("heart.svg", path.join(iconsDir, "red-heart.svg"), "#EF4444");
|
|
|
|
// auth password eye png replacements -> svg
|
|
copyIcon("eye.svg", path.join(iconsDir, "eye-open.svg"));
|
|
copyIcon("eye-slash.svg", path.join(iconsDir, "eye-slash.svg"));
|
|
|
|
for (const [rel, vuesax] of Object.entries(CHAT_MAP)) {
|
|
const dest = path.join(iconsDir, "chat", rel);
|
|
if (copyIcon(vuesax, dest)) count++;
|
|
}
|
|
|
|
console.log(`Synced ${count} icon files to legacy paths.`);
|