import { createRouter, createWebHistory, createMemoryHistory } from 'vue-router' import SettingsView from './views/SettingsView.vue' import GalleryView from './views/GalleryView.vue' import ShowcaseView from './views/ShowcaseView.vue' import TagsView from './views/TagsView.vue' import ArtistView from './views/ArtistView.vue' import SeriesManageView from './views/SeriesManageView.vue' import SeriesReaderView from './views/SeriesReaderView.vue' import SubscriptionsView from './views/SubscriptionsView.vue' import PostsView from './views/PostsView.vue' import ArtistsView from './views/ArtistsView.vue' // The application's front door. `/` redirects here. Changing the front door // is a one-line edit (e.g. '/gallery' or '/tags'). export const FRONT_DOOR = '/showcase' const routes = [ // Root is a redirect only — no meta.title so it stays out of the nav. { path: '/', redirect: FRONT_DOOR }, // FC-2: image backbone { path: '/showcase', name: 'showcase', component: ShowcaseView, meta: { title: 'Showcase' } }, { path: '/gallery', name: 'gallery', component: GalleryView, meta: { title: 'Gallery' } }, { path: '/artists', name: 'artists', component: ArtistsView, meta: { title: 'Artists' } }, { path: '/tags', name: 'tags', component: TagsView, meta: { title: 'Tags' } }, // Artist detail — no meta.title (reached by clicking an artist, not nav). { path: '/artist/:slug', name: 'artist', component: ArtistView }, // Series management — no meta.title (reached from a series tag card). { path: '/series/:tagId', name: 'series-manage', component: SeriesManageView }, // Series reader — immersive (no top nav, no meta.title). { path: '/series/:tagId/read', name: 'series-read', component: SeriesReaderView, meta: { immersive: true } }, { path: '/settings', name: 'settings', component: SettingsView, meta: { title: 'Settings' } }, // FC-3: subscription backbone // /credentials and /downloads were folded into /subscriptions as subtabs // 2026-05-27 (?tab=settings and ?tab=downloads). The hub view owns the // whole download pipeline domain. { path: '/posts', name: 'posts', component: PostsView, meta: { title: 'Posts' } }, { path: '/subscriptions', name: 'subscriptions', component: SubscriptionsView, meta: { title: 'Subscriptions' } }, // Bookmark/back-button safety net for the routes that got folded in // (no meta.title — stay out of TopNav). { path: '/credentials', redirect: '/subscriptions?tab=settings' }, { path: '/downloads', redirect: '/subscriptions?tab=downloads' } ] // Browser uses HTML5 history; non-browser (Vitest/SSR) falls back to memory // history so the module is importable without `window`. const history = typeof window !== 'undefined' ? createWebHistory() : createMemoryHistory() const router = createRouter({ history, routes }) export default router