Appearance
Layouts ​
All layouts live in app/layouts/. Pages declare their layout with definePageMeta({ layout: 'layout-name' }).
Layout Reference ​
| File | Layout name | Used by |
|---|---|---|
default.vue | default | Passthrough — renders <NuxtPage /> directly with no shell |
login-layout.vue | login-layout | Auth pages (login, register, forgot-password, reset-password, social-login, external-verify) |
collage-layout.vue | collage-layout | Main authenticated DAM pages |
general-settings-layout.vue | general-settings-layout | Workspace settings section |
profile-layout.vue | profile-layout | Account/profile settings section |
error-auth.vue | error-auth | Error pages shown to authenticated users |
error-guest.vue | error-guest | Error pages shown to unauthenticated (guest) users |
error-settings.vue | error-settings | Error pages shown within the settings context |
default Layout ​
A bare passthrough — the template is just <NuxtPage />. Used as a fallback when no other layout is declared. Pages that need a shell declare their layout explicitly; those that genuinely need no frame (e.g. certain embedded or redirect pages) can rely on default.
login-layout Layout ​
The unauthenticated shell for all auth flows. Behaviour varies by context:
- Standard mode — renders a centered card with the workspace logo (or the Collage logo if unbranded), decorative illustrated elements on login and password-reset pages, and a "Powered by Collage" footer on the
external-verifyroute. - Support platform mode — when
IS_SUPPORT_PLATFORM=true, a two-column layout is rendered: the login card on the left, an<SupportIcon>illustration on the right.
Branding is resolved by useBrand() / the branding.server.ts + branding.client.ts plugins. The layout waits up to 4 seconds for branding to resolve before rendering the form, preventing a flash of the default Collage logo on white-label hosts.
The layout exposes a redirecting state via provide('redirecting', redirecting) so child auth components can suppress content during a post-login redirect.
collage-layout Layout ​
The primary shell for all authenticated DAM pages. Contains:
Sidebar— left navigation drawer (workspace logo, nav links, workspace switcher, mini/expanded state viauseSidebarMiniState)Header— top bar with alert strip and global search, shown conditionally (showCollageHeader,hideLayoutHeader,isEmbeddedHeaderPage)NuxtPage— page contentUploadBackdrop— drag-to-upload overlay, shown while files are dragged into the windowMiniUploadDialog— global upload progress widget driven bydamStore.uploadsFolderDialog— global create/move-copy folder modal (toggled viauseCollageLayout)ProcessingRequestOverlay— full-screen overlay for long-running API calls (>5 s)
On every route change, the layout:
- Runs a workspace access check via
$api('check-workspace-access')and redirects if the user has lost access. - Calls
maybeFetchWorkspaceBranding()to lazy-load white-label branding if it was not resolved server-side. - Resets the
hideLayoutHeaderstate flag.
Dynamic Vuetify theming from workspace branding is applied by useBrandingTheme().
general-settings-layout Layout ​
Workspace settings shell. Contains:
Sidebar— same sidebar ascollage-layout, collapsed to mini width on settings pages (theminiclass is applied to.collage-main)NuxtPage— settings page contentFolderDialog— shared global folder modalProcessingRequestOverlay— shared long-running API overlay
Workspace access is verified on mount and on each route change (same logic as collage-layout). Uses useCollageLayout() for shared state (folder dialog, move-copy flag, workspace access check).
profile-layout Layout ​
Account/profile settings shell. Contains:
Sidebar— same sidebar component; sidebar mini state is tracked viauseSidebarMiniStateNuxtPage— profile page content (only rendered whenisAuthenticatedis true)FolderDialog— shared global folder modal
Listens to the mitt bus event open-add-folder-dailog to open the folder dialog from any child page. Recovers missing workspace branding on mount if damStore.brandingDetails was not populated by SSR.
error-auth Layout ​
Minimal shell for error pages presented to authenticated users. Renders the Sidebar alongside a .collage-main content area. Used for errors that occur within a workspace context where the user is logged in.
error-guest Layout ​
Bare shell for error pages presented to unauthenticated (guest) users. Template is a single .main.full-404 wrapper around <slot /> — no sidebar, no nav. Used for 404s and other errors hit before login.
error-settings Layout ​
Shell for errors within the settings section. Renders the Sidebar with an .account-settings content card. Wraps the slot in a <v-card> with top padding.
Declaring a Layout ​
vue
<script setup lang="ts">
definePageMeta({
layout: 'collage-layout',
middleware: ['auth'],
})
</script>