diff --git a/src/components/layout/AppSidebar.vue b/src/components/layout/AppSidebar.vue index b72fe4f..8dc359f 100644 --- a/src/components/layout/AppSidebar.vue +++ b/src/components/layout/AppSidebar.vue @@ -48,7 +48,7 @@ const isActive = (href: string) => {
Logo diff --git a/src/components/layout/MobileDrawer.vue b/src/components/layout/MobileDrawer.vue index 5eeefd3..882d673 100644 --- a/src/components/layout/MobileDrawer.vue +++ b/src/components/layout/MobileDrawer.vue @@ -77,7 +77,7 @@ const navigateTo = (href: string) => { Logo diff --git a/src/pages/Login.vue b/src/pages/Login.vue index 7f465f4..ff89413 100644 --- a/src/pages/Login.vue +++ b/src/pages/Login.vue @@ -4,7 +4,7 @@
- Logo + Logo

Virtual Realm

diff --git a/src/pages/LoginDemo.vue b/src/pages/LoginDemo.vue index 4fbb234..af662ce 100644 --- a/src/pages/LoginDemo.vue +++ b/src/pages/LoginDemo.vue @@ -5,7 +5,7 @@
- Logo + Logo

Welcome to the Virtual Realm

diff --git a/vite.chat.config.ts b/vite.chat.config.ts index afa3416..e91a7b2 100644 --- a/vite.chat.config.ts +++ b/vite.chat.config.ts @@ -5,7 +5,7 @@ import { defineConfig, type Plugin } from 'vite' import { VitePWA } from 'vite-plugin-pwa' import { ViteImageOptimizer } from 'vite-plugin-image-optimizer' import { visualizer } from 'rollup-plugin-visualizer' -import { brand, brandAlias, brandAssetsPlugin } from './vite-branding' +import { brand, brandAlias, brandAppLogoAliasEntry, brandAssetsPlugin } from './vite-branding' function chatHtmlPlugin(): Plugin { return { @@ -103,12 +103,15 @@ export default defineConfig(({ mode }) => ({ }), ], resolve: { - alias: { - ...brandAlias, + // Array form so the per-standalone logo regex (matches `@brand-app-logo` + // with optional `?url` query) doesn't get shadowed by the bare aliases. + alias: [ + brandAppLogoAliasEntry('chat'), + ...Object.entries(brandAlias).map(([find, replacement]) => ({ find, replacement })), // ORDER MATTERS — @/app.config must precede @ (first-match-wins). - '@/app.config': fileURLToPath(new URL('./src/chat-app/app.config.ts', import.meta.url)), - '@': fileURLToPath(new URL('./src', import.meta.url)), - }, + { find: '@/app.config', replacement: fileURLToPath(new URL('./src/chat-app/app.config.ts', import.meta.url)) }, + { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) }, + ], }, build: { outDir: 'dist-chat', diff --git a/vite.config.ts b/vite.config.ts index 6363a0b..ea5fe42 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -5,7 +5,7 @@ import { defineConfig } from 'vite' import Inspect from 'vite-plugin-inspect' import { ViteImageOptimizer } from 'vite-plugin-image-optimizer' import { visualizer } from 'rollup-plugin-visualizer' -import { brand, brandAlias, brandAssetsPlugin } from './vite-branding' +import { brand, brandAlias, brandAppLogoAliasEntry, brandAssetsPlugin } from './vite-branding' // https://vite.dev/config/ // @@ -49,10 +49,13 @@ export default defineConfig(({ mode }) => ({ }) ], resolve: { - alias: { - ...brandAlias, - '@': fileURLToPath(new URL('./src', import.meta.url)) - } + // Array form so the per-standalone logo regex (matches `@brand-app-logo` + // with optional `?url` query) doesn't get shadowed by the bare alias. + alias: [ + brandAppLogoAliasEntry(), + ...Object.entries(brandAlias).map(([find, replacement]) => ({ find, replacement })), + { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) }, + ] }, build: { rollupOptions: { diff --git a/vite.forum.config.ts b/vite.forum.config.ts index 3dcc6e4..e409b62 100644 --- a/vite.forum.config.ts +++ b/vite.forum.config.ts @@ -5,7 +5,7 @@ import { defineConfig, type Plugin } from 'vite' import { VitePWA } from 'vite-plugin-pwa' import { ViteImageOptimizer } from 'vite-plugin-image-optimizer' import { visualizer } from 'rollup-plugin-visualizer' -import { brand, brandAlias, brandAssetsPlugin } from './vite-branding' +import { brand, brandAlias, brandAppLogoAliasEntry, brandAssetsPlugin } from './vite-branding' function forumHtmlPlugin(): Plugin { return { @@ -103,12 +103,15 @@ export default defineConfig(({ mode }) => ({ }), ], resolve: { - alias: { - ...brandAlias, + // Array form so the per-standalone logo regex (matches `@brand-app-logo` + // with optional `?url` query) doesn't get shadowed by the bare aliases. + alias: [ + brandAppLogoAliasEntry('forum'), + ...Object.entries(brandAlias).map(([find, replacement]) => ({ find, replacement })), // ORDER MATTERS — @/app.config must precede @ (first-match-wins). - '@/app.config': fileURLToPath(new URL('./src/forum-app/app.config.ts', import.meta.url)), - '@': fileURLToPath(new URL('./src', import.meta.url)), - }, + { find: '@/app.config', replacement: fileURLToPath(new URL('./src/forum-app/app.config.ts', import.meta.url)) }, + { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) }, + ], }, build: { outDir: 'dist-forum', diff --git a/vite.libra.config.ts b/vite.libra.config.ts index 8fb1ca5..1c34353 100644 --- a/vite.libra.config.ts +++ b/vite.libra.config.ts @@ -5,7 +5,7 @@ import { defineConfig, type Plugin } from 'vite' import { VitePWA } from 'vite-plugin-pwa' import { ViteImageOptimizer } from 'vite-plugin-image-optimizer' import { visualizer } from 'rollup-plugin-visualizer' -import { brand, brandAlias, brandAssetsPlugin } from './vite-branding' +import { brand, brandAlias, brandAppLogoAliasEntry, brandAssetsPlugin } from './vite-branding' /** * Plugin to rewrite dev server requests to libra.html @@ -110,16 +110,19 @@ export default defineConfig(({ mode }) => ({ }), ], resolve: { - alias: { - ...brandAlias, + // Array form so the per-standalone logo regex (matches `@brand-app-logo` + // with optional `?url` query) doesn't get shadowed by the bare aliases. + alias: [ + brandAppLogoAliasEntry('libra'), + ...Object.entries(brandAlias).map(([find, replacement]) => ({ find, replacement })), // ORDER MATTERS — @rollup/plugin-alias is first-match-wins. // The more specific @/app.config remap must precede the @ prefix // alias, otherwise '@/app.config' matches '@' first and resolves // to ./src/app.config (the hub config). ExpensesAPI etc. import // from @/app.config and need the per-app config. - '@/app.config': fileURLToPath(new URL('./src/accounting-app/app.config.ts', import.meta.url)), - '@': fileURLToPath(new URL('./src', import.meta.url)), - }, + { find: '@/app.config', replacement: fileURLToPath(new URL('./src/accounting-app/app.config.ts', import.meta.url)) }, + { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) }, + ], }, build: { outDir: 'dist-libra', diff --git a/vite.market.config.ts b/vite.market.config.ts index 01d22b6..9cd8a6a 100644 --- a/vite.market.config.ts +++ b/vite.market.config.ts @@ -5,7 +5,7 @@ import { defineConfig, type Plugin } from 'vite' import { VitePWA } from 'vite-plugin-pwa' import { ViteImageOptimizer } from 'vite-plugin-image-optimizer' import { visualizer } from 'rollup-plugin-visualizer' -import { brand, brandAlias, brandAssetsPlugin } from './vite-branding' +import { brand, brandAlias, brandAppLogoAliasEntry, brandAssetsPlugin } from './vite-branding' function marketHtmlPlugin(): Plugin { return { @@ -103,12 +103,15 @@ export default defineConfig(({ mode }) => ({ }), ], resolve: { - alias: { - ...brandAlias, + // Array form so the per-standalone logo regex (matches `@brand-app-logo` + // with optional `?url` query) doesn't get shadowed by the bare aliases. + alias: [ + brandAppLogoAliasEntry('market'), + ...Object.entries(brandAlias).map(([find, replacement]) => ({ find, replacement })), // ORDER MATTERS — @/app.config must precede @ (first-match-wins). - '@/app.config': fileURLToPath(new URL('./src/market-app/app.config.ts', import.meta.url)), - '@': fileURLToPath(new URL('./src', import.meta.url)), - }, + { find: '@/app.config', replacement: fileURLToPath(new URL('./src/market-app/app.config.ts', import.meta.url)) }, + { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) }, + ], }, build: { outDir: 'dist-market', diff --git a/vite.restaurant.config.ts b/vite.restaurant.config.ts index 23f27ef..7cb4a87 100644 --- a/vite.restaurant.config.ts +++ b/vite.restaurant.config.ts @@ -5,7 +5,7 @@ import { defineConfig, type Plugin } from 'vite' import { VitePWA } from 'vite-plugin-pwa' import { ViteImageOptimizer } from 'vite-plugin-image-optimizer' import { visualizer } from 'rollup-plugin-visualizer' -import { brand, brandAlias, brandAssetsPlugin } from './vite-branding' +import { brand, brandAlias, brandAppLogoAliasEntry, brandAssetsPlugin } from './vite-branding' function restaurantHtmlPlugin(): Plugin { return { @@ -110,12 +110,15 @@ export default defineConfig(({ mode }) => ({ }), ], resolve: { - alias: { - ...brandAlias, + // Array form so the per-standalone logo regex (matches `@brand-app-logo` + // with optional `?url` query) doesn't get shadowed by the bare aliases. + alias: [ + brandAppLogoAliasEntry('restaurant'), + ...Object.entries(brandAlias).map(([find, replacement]) => ({ find, replacement })), // ORDER MATTERS — @/app.config must precede @ (first-match-wins). - '@/app.config': fileURLToPath(new URL('./src/restaurant-app/app.config.ts', import.meta.url)), - '@': fileURLToPath(new URL('./src', import.meta.url)), - }, + { find: '@/app.config', replacement: fileURLToPath(new URL('./src/restaurant-app/app.config.ts', import.meta.url)) }, + { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) }, + ], }, build: { outDir: 'dist-restaurant', diff --git a/vite.tasks.config.ts b/vite.tasks.config.ts index e903844..129216a 100644 --- a/vite.tasks.config.ts +++ b/vite.tasks.config.ts @@ -5,7 +5,7 @@ import { defineConfig, type Plugin } from 'vite' import { VitePWA } from 'vite-plugin-pwa' import { ViteImageOptimizer } from 'vite-plugin-image-optimizer' import { visualizer } from 'rollup-plugin-visualizer' -import { brand, brandAlias, brandAssetsPlugin } from './vite-branding' +import { brand, brandAlias, brandAppLogoAliasEntry, brandAssetsPlugin } from './vite-branding' function tasksHtmlPlugin(): Plugin { return { @@ -103,12 +103,15 @@ export default defineConfig(({ mode }) => ({ }), ], resolve: { - alias: { - ...brandAlias, + // Array form so the per-standalone logo regex (matches `@brand-app-logo` + // with optional `?url` query) doesn't get shadowed by the bare aliases. + alias: [ + brandAppLogoAliasEntry('tasks'), + ...Object.entries(brandAlias).map(([find, replacement]) => ({ find, replacement })), // ORDER MATTERS — @/app.config must precede @ (first-match-wins). - '@/app.config': fileURLToPath(new URL('./src/tasks-app/app.config.ts', import.meta.url)), - '@': fileURLToPath(new URL('./src', import.meta.url)), - }, + { find: '@/app.config', replacement: fileURLToPath(new URL('./src/tasks-app/app.config.ts', import.meta.url)) }, + { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) }, + ], }, build: { outDir: 'dist-tasks', diff --git a/vite.wallet.config.ts b/vite.wallet.config.ts index cc9fc9a..aa012e8 100644 --- a/vite.wallet.config.ts +++ b/vite.wallet.config.ts @@ -5,7 +5,7 @@ import { defineConfig, type Plugin } from 'vite' import { VitePWA } from 'vite-plugin-pwa' import { ViteImageOptimizer } from 'vite-plugin-image-optimizer' import { visualizer } from 'rollup-plugin-visualizer' -import { brand, brandAlias, brandAssetsPlugin } from './vite-branding' +import { brand, brandAlias, brandAppLogoAliasEntry, brandAssetsPlugin } from './vite-branding' /** * Plugin to rewrite dev server requests to wallet.html @@ -109,12 +109,15 @@ export default defineConfig(({ mode }) => ({ }), ], resolve: { - alias: { - ...brandAlias, + // Array form so the per-standalone logo regex (matches `@brand-app-logo` + // with optional `?url` query) doesn't get shadowed by the bare aliases. + alias: [ + brandAppLogoAliasEntry('wallet'), + ...Object.entries(brandAlias).map(([find, replacement]) => ({ find, replacement })), // ORDER MATTERS — @/app.config must precede @ (first-match-wins). - '@/app.config': fileURLToPath(new URL('./src/wallet-app/app.config.ts', import.meta.url)), - '@': fileURLToPath(new URL('./src', import.meta.url)), - }, + { find: '@/app.config', replacement: fileURLToPath(new URL('./src/wallet-app/app.config.ts', import.meta.url)) }, + { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) }, + ], }, build: { outDir: 'dist-wallet',