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 @@
-

+
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',