Skip to content

Components ​

All components live in app/components/. Nuxt 4 auto-imports with pathPrefix: false — a file at components/asset/AssetCard.vue is used in templates as <AssetCard>, not <AssetAssetCard>.

Conventions ​

  • <script setup lang="ts"> exclusively
  • Props: defineProps<{ foo: string; bar?: number }>()
  • Emits: defineEmits<{ (e: 'update:modelValue', v: string): void }>()
  • No any — use unknown + type guards if the shape is truly dynamic
  • Component files match the PascalCase component name exactly
  • Co-locate slot content and render logic; extract sub-components when a single template exceeds ~150 lines

Global Components ​

App shell and persistent UI. Auto-imported via Nuxt's component system.

ComponentDescription
AppLoader.vueAnimated Collage SVG logo used as a loading spinner; accepts size/position props and a color array
AsyncIcon.vueResolves icon names against the collage: Vuetify icon set; accepts name, color, width, height, and strokeWidth
BreadCrumbs.vueFolder-aware breadcrumb trail; navigates to root via the folder icon and supports both parent-path and children arrays
DamNotification.vueSidebar notification bell with unread badge; opens a slide-out menu of system notifications
EmptyStateIcon.vueRenders either the default or branded empty-state icon depending on useBrand().brand.is_branded
Error.vueHTTP error display with status code, human-readable message, and a back-to-home button; handles 401 session-expired case
ExternalLogo.vueRenders a workspace logo image, or falls back to the brand name as text
Header.vueTop app bar; shows SMTP-unconfigured and uncategorized-assets alerts, embeds GlobalSearch, and exposes workspace-level controls
ProcessingRequestOverlay.vueFull-screen blocking overlay with spinner and configurable title; shown during long async operations
Sidebar.vueLeft navigation drawer with rail/mini toggle, workspace logo, drag-to-folder support, and responsive mobile close button

Asset Components ​

Components used in asset grid views, the asset detail panel, and the upload flow.

ComponentDescription
AddTags.vueThin wrapper around TagsBox for the asset detail panel; wires tag search, add, and remove to the asset store
AssetCard.vueGrid card for a single asset; handles image, video (hover-play preview), audio, and generic file types; integrates selection checkbox and options menu
AssetContainer.vueInline preview container for PDFs (iframe), documents (image preview), and text files; shows skeleton while loading
AssetCustomFieldsSection.vueDisplays editable custom field values in the asset detail panel; renders multi-select fields as chips and dates with a calendar style
AssetImageOverlay.vueHover overlay for image asset cards; renders selection checkbox, options menu (DamItemMenu), and download button
AssetUpload.vueFull upload panel with drag-drop zone, queue management, per-file progress, success/error summary, and a "Next" action for post-upload flow
AssetVersionItem.vueSingle row in the version history list; shows thumbnail, version label, date, uploaded-by, and a context menu for restore/delete
AssetVideoOverlay.vueHover overlay for video asset cards; same controls pattern as AssetImageOverlay with video-specific behaviour
ImageEditActions.vueSidebar panel for the image editor; exposes resize (width/height), crop aspect ratio presets, flip, and rotate controls
ImageEditor.vueCropper.js canvas wrapper; initialises the cropper on image load and delegates resize/flip/rotate commands from ImageEditActions
MediaResources.vueHidden DOM elements that wire assets into Fancybox for lightbox expand; renders a hidden <video> or <a> per file
MiniUploadDialog.vueFloating mini-panel showing the active upload queue; collapsible header with overall percentage and error indicator
UploadBackdrop.vueFull-viewport drag-over drop zone overlay; fades in when files are dragged over the window
UploadChunk.vueSingle file row inside the upload queue; shows folder path, filename, chunk progress bar, and error/retry state
UploadChunkExternal.vueVariant of UploadChunk for the external (portal) upload context; same layout adapted for guest uploaders
UploadedListItem.vueTable list row for a completed upload; thumbnail, filename, folder path, and selection checkbox

Collage Components ​

Components used in collage grid/list views and the dashboard recents panel.

ComponentDescription
Card.vueCollage thumbnail card; supports single and multi-image preview mosaics with a lazy-load strategy and an options menu
FolderCard.vueFolder card in the collage grid; renders folder icon, name, selection checkbox, and context menu
ListItem.vueCollage list-view row; thumbnail avatar, collage name, and metadata columns
MediaCard.vueAsset card within a collage or portal detail view; handles restricted-visibility lock icon and opens asset detail on click
MediaControls.vueHover control overlay for media cards; selection checkbox and options menu in card-mode context
PreviewModal.vueHidden Fancybox resources for collage-detail lightbox; injects <video> and <a> elements that Fancybox targets
RecentFolderListItem.vueFolder row in the dashboard "Recent" list; folder icon, name, and asset count
RecentUploadListItem.vueAsset row in the dashboard "Recent Uploads" list; thumbnail, upload date, and filename
VideoControls.vueHover overlay variant for video media cards; same checkbox and menu pattern tuned for video

DAM Components ​

Core list-view, toolbar, and utility components used across DAM folder and asset views.

ComponentDescription
CustomTextEditor.vueLightweight rich-text editor (bold, italic, underline, lists) used for DAM text fields such as descriptions
DamBulkActionsBar.vueFloating or inline action bar that appears when one or more items are selected; draggable when floating
DamDetailListView.vueSortable table list for assets with header (DamListHeader), row slots, and scroll events
DamDisplayPanel.vue"Display" dropdown button; controls active view mode (grid/mosaic/list) and thumbnail size for the current view
DamItemMenu.vueReusable three-dot context menu button; filters out invisible items and delegates click events to the parent
DamLibraryListView.vueSortable table list for folders and collages; same structure as DamDetailListView with a name-field prop
DamListHeader.vueSticky table header row with per-column sort arrows, loading spinners, and a select-all checkbox
DamListViewSkeleton.vueSkeleton placeholder for list views; supports full-header and rows-only modes
DamSettingsListView.vueSortable table list variant used on org-settings pages
DamSharingListView.vueSortable table list variant used on sharing/permissions pages
SearchBreadCrumbs.vueCompact breadcrumb strip shown inside folder pickers and search results; ellipsis-truncates long paths
StaticPlanNotificationSettings.vueRead-only notification settings UI shown to users whose plan does not allow editing

DAM / Org-Settings Dialogs ​

Dialogs under dam/Dialogs/Org-Settings/, used from the organisation settings pages.

ComponentDescription
ActivateUserDialog.vueSets a new password when activating an org user; validates and submits via the users API
ActivityLogsDialog.vueShows the last 30 days of user activity in a paginated table
ImageCropper.vueTabbed upload-and-crop dialog for logos and profile images; supports direct upload and URL import tabs
UserDialog.vueAdd or edit an external workspace user (name, email, role)
WorkspaceOwnerDialog.vueTransfers workspace ownership to another super-user; requires confirmation

Portal Components ​

Components under dam/portals/ for configuring and managing brand portals.

ComponentDescription
AddEditBannerDialog.vueDialog to create or update a portal banner; accepts image upload, link URL, and active state
AddEditTileDialog.vueDialog to create or update a portal tile; image upload, title, and link fields
CNameGuideDialog.vueStep-by-step CNAME setup guide for custom-domain portals; displays the required DNS record
InvitePortalUserDialog.vueInvite a new portal user or edit an existing one (name, email, permission level)
PortalBannerList.vueRenders, reorders, activates, edits, and deletes portal banners
PortalBrandingTab.vueBranding settings tab inside portal settings; logo, colours, custom domain, and white-label toggles
PortalTileList.vueRenders, reorders, activates, edits, and deletes portal tiles; includes a carousel-mode toggle
PortalUpgradePlanSection.vueUpgrade CTA shown when portal branding features are gated by the workspace plan
StaticPlanWorkspaceBranding.vueRead-only workspace branding preview displayed when the plan does not allow editing

Dialog Components ​

General-purpose dialogs in components/dialogs/.

ComponentDescription
AccountSettingsMobileDialog.vueExplains that account settings require the desktop version; shown on small screens
AdvanceShareDialog.vue"Update Advanced Settings" dialog for share links (expiry, download permissions, etc.)
AnnouncementDialog.vueConfigurable announcement/notification modal with title and rich-text body
AssetQuickViewDialog.vueLarge lightbox preview of a single asset with full metadata, tags, and version info
ConfirmationDialog.vueGeneric yes/no confirmation with configurable heading, message, and button labels
CreateOrRenameDialog.vueShared dialog for creating new collages or renaming collages, folders, and assets
CreatePortalDialog.vueCreates a new brand portal; accepts a portal name with validation
CustomFieldDialog.vueRemove-option confirmation sub-dialog used inside the custom fields manager
ExternalUserDialog.vueAdd or edit an external user (name, email); used from the folder sharing panel
FileConversionDialog.vueDownload dialog with format conversion options; plan-gates certain formats
LogoEditDialog.vueTabbed upload/crop dialog for the workspace logo (upload tab + URL tab)
ManageCustomFields.vueFull custom-fields manager dialog (add, edit, reorder, delete fields)
PermissionDialog.vuePortal visibility/permission dialog for a folder or asset; lists portals with toggle switches
PortalLimitDialog.vueShown when the workspace has reached its portal quota; prompts user to contact support
SaveToCollage.vueAdds selected assets to an existing collage or creates a new one
ShareAssetDialog.vueTabbed sharing dialog (link visibility, download options, password, expiry)
StaticPermissionDialog.vueRead-only portal permission preview shown when plan does not allow editing
AddTags/AddMultipleTags.vueBulk tag-add dialog for multiple selected assets; wraps TagsBox
AddTags/TagsBox.vueTag input UI with search autocomplete, common-tag suggestions, and chip display
FolderDialogs/FolderDialog.vueFolder picker for move/copy operations; supports creating a new subfolder inline
FolderDialogs/FolderDialogListItem.vueSingle folder row inside the folder picker; handles disabled state and nested breadcrumbs

Search Components ​

Components used on the global search bar and the /search results page.

ComponentDescription
AddedFilterOption.vueActive filter chip showing category, operator, and value; click opens inline menus to change operator or value
GlobalSearch.vueHeader search bar with keyboard handling, instant type-ahead suggestions, and tab navigation
SearchAssets.vueAsset results section on the search results page (grid or list view)
SearchCollages.vueCollage results section on the search results page
SearchEmptyState.vueZero-results empty state; configurable title and subtitle
SearchFilter.vueTwo-level filter dropdown (pick category → pick value/operator); supports custom fields
SearchFolders.vueFolder results section on the search results page
SearchResultGroup.vueGroups a labelled set of search hits using DamDetailListView or DamLibraryListView
SearchTableHeader.vueSortable column header row for the search results list view
SearchTabs.vueTab switcher between All / Assets / Collages / Folders; the "All" tab is available only inside GlobalSearch

Shared Components ​

Reusable building blocks in components/shared/ used across multiple features.

ComponentDescription
ShareAssetsPasswordProtected.vuePassword entry form shown when a share link is password-protected
SharedAssetsPage.vueFull shared-assets page wrapper; handles the password gate and renders the asset grid once access is granted
ShareLinkListTable.vueSortable table of active share links with select-all and column sorting
UpgradePlanSection.vueUpgrade plan CTA block with a "Contact Support" button; shown when a feature is gated by plan
ViewModeSwitcher.vueIcon button group to switch between grid, mosaic, and list view modes

Insights Components ​

Analytics visualisation components used on the Insights page.

ComponentDescription
InsightsGraph.vueRenders a row of weekly bar-chart metric cards (views, downloads, etc.) using Bar.client
InsightsTabGraph.vueTabbed chart panel; each tab shows a time-series metric chart with loading and no-data states

Chart Components ​

ComponentDescription
Bar.client.vueClient-only Chart.js bar chart wrapper (via vue-chartjs); accepts chartData, options, and plugins props

Org-Settings Components ​

Tab content components used inside the account/organisation settings pages.

ComponentDescription
EmailNotificationsAlert.vueAlert banner for notification-related status messages (e.g. notifications disabled by admin)
NotificationSettingsTab.vueNotification settings tab with system/email toggles per event type
ProfileSettingsTab.vueUser profile settings tab; edits avatar, display name, email, and password

Skeleton Loaders ​

ComponentDescription
skeleton-loaders/collage/CardSkeleton.vueRepeating card-grid skeleton rows used while collage/asset grids are loading
skeleton-loaders/collage/MosaicSkeleton.vueMosaic-layout skeleton tiles with varied sizes matching the mosaic grid pattern

Table Components ​

ComponentDescription
table/SortTableHeaderColumn.vueSingle sortable table header column; shows sort arrow on hover and a spinner during async sort

Theme / Settings Components ​

ComponentDescription
theme/settings/AccountSettingsLeftMenu.vueLeft navigation menu for the account settings layout; includes workspace selector and section links

SVG Components ​

Static SVG illustration components in components/svg/. These are used as decorative elements and are not interactive.

ComponentDescription
EmailIcon.vueEmail envelope illustration used on email-confirmation screens
FaviconIcon.vueCollage favicon SVG
LoginDecorLeft.vueLeft decorative element on the login/auth pages
LoginDecorRight.vueRight decorative element on the login/auth pages
SupportIcon.vueSupport/help illustration icon