From 3f31ef591cd497184dc72757ab2e85b5254c6525 Mon Sep 17 00:00:00 2001 From: gnezim Date: Fri, 17 Apr 2026 22:54:40 +0300 Subject: [PATCH] Wire favicon via Modern.js html config Angular's index.html referenced /assets/img/favicon.ico + a PNG icon + an apple-touch-icon; the React port carried those assets through config/public/ but never linked them in the HTML head, so the tab icon was blank and /favicon.ico 404'd. Add html.favicon (copied to publicDir root) plus html.tags for 16/32 PNG icons and apple-touch-icon. --- config/public/favicon.ico | Bin 0 -> 15086 bytes modern.config.ts | 30 ++++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 config/public/favicon.ico diff --git a/config/public/favicon.ico b/config/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3b1abcc71e60222b60c979a9f324e3d468b36628 GIT binary patch literal 15086 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 literal 0 HcmV?d00001 diff --git a/modern.config.ts b/modern.config.ts index 64ce3b58..0eb9f850 100644 --- a/modern.config.ts +++ b/modern.config.ts @@ -9,6 +9,36 @@ export default defineConfig({ source: { entriesDir: "./src", }, + html: { + favicon: "./config/public/favicon.ico", + tags: [ + { + tag: "link", + attrs: { + rel: "icon", + type: "image/png", + sizes: "32x32", + href: "/assets/img/favicon-32x32.png", + }, + }, + { + tag: "link", + attrs: { + rel: "icon", + type: "image/png", + sizes: "16x16", + href: "/assets/img/favicon-16x16.png", + }, + }, + { + tag: "link", + attrs: { + rel: "apple-touch-icon", + href: "/assets/img/favicon-touch.png", + }, + }, + ], + }, runtime: { router: { future: {