UI Component Inventory

Canonical catalogue of the 52 Vue components in gov-chat-frontend — DS primitives, layout, chat, admin, services, files, settings, and shared widgets.

For frontend developers. The single source of truth for which .vue files exist, where they live, and which one to reach for when you need a pattern. Counts are verified against the current source tree.

When to use this page

  • You need to find an existing component before writing a new one (DS primitives first, then shared widgets, then feature components).
  • You need to locate the file that owns a UI behaviour (search the section, then grep the file).
  • You are onboarding to the codebase and want a one-page map of every screen and dialog.

Counts in the tables below come from find components/gov-chat-frontend/src -name '*.vue' -not -path '*/__tests__/*' | wc -l and add up to 52 files. Tests live under src/__tests__/ and are intentionally not part of this inventory.

Summary

GroupCountWhere
Root app shell1src/App.vue
Design System primitives12src/components/ds/
Chart components5src/components/charts/
Layout / navigation3src/components/{NavBarComponent,SideBarComponent,SplashScreen}.vue
Chat interface6src/components/Chat*.vue, RightSideBarComponent.vue, WeatherPanel.vue
Admin & analytics4src/components/{Admin,Analytics*,UnifiedAnalytics}*.vue
Query inspector (admin)3src/components/admin/QueryInspector/
Authentication & user3src/views/CallbackView.vue, DashboardView.vue, UserProfileComponent.vue
Settings2src/components/{SettingsComponent,LanguageSelector}.vue
File management4src/components/{FileUploadComponent,UploadFilesDialog,AddFromLinkDialog,FileDetailsDialog}.vue
Service / context2src/components/Service*Panel*.vue
Shared widgets6src/components/{ConfirmDialog,ModalDialog,ContextMenu,OperationResultsModal,LogSearchDialog,SearchableCountryDropdown}.vue
Total52

The legacy src/components/UsageTrendChart.vue is still on disk (raw ApexCharts) but has been superseded by the wrapper at src/components/charts/UsageTrendChart.vue. New code uses the wrapper only.


Design System primitives — src/components/ds/

All visual primitives. Always use these first. Component-level rules, variant tables, and the DS token reference live in components/gov-chat-frontend/CLAUDE.md (in-repo). What follows is the file map.

ComponentFileVariantsUsed for
DsButtonds/Button.vueprimary, secondary, ghost, dangerEvery button. tag="a" for link styling.
DsCardds/Card.vuedefault, flat, elevated, outlinePanels, metric cards, list items. hoverable for clickable surfaces.
DsInputds/Input.vuesm, md, lg + textareaText inputs, search, textareas. Pairs with DsFormGroup.
DsFormGroupds/FormGroup.vue—Label + input wrapper; handles error display.
DsSelectds/Select.vuesm, md, lgNative dropdowns.
DsComboboxds/Combobox.vuesm, md, lgSearchable dropdowns (country picker, filter selects).
DsModalds/Modal.vuesm, md, lg, xlDialogs and confirmations.
DsPillds/Pill.vueaccent, success, warning, danger, infoStatus labels, badges.
DsSpinnerds/Spinner.vuesm, md, lg + overlay modeLoading states. overlay=true for full-area spinners.
DsStatusTagds/StatusTag.vuesuccess, error, warning, info, pendingDocument/crawl status mapping.
DsTabsds/Tabs.vuedefault, fillTab navigation. fill for full-width tabs.
DsStateDisplayds/StateDisplay.vueempty, loading, errorEmpty/error/loading placeholders.

Rule: DS components do not perform i18n internally. Consumers pass translated strings via props or slots. See i18n section below.

Patterns that intentionally do NOT have a DS component: layout panels (sidebar, navbar), specialised widgets (thumb buttons, skin-tone selectors), chart-library tooltips (ECharts/ApexCharts), and large complex dialogs (FileDetailsDialog, UserProfileComponent — domain logic is too entangled to safely refactor). See the in-repo CLAUDE.md for the full list.


Chart components — src/components/charts/

All charts use ApexCharts through the vue3-apexcharts Vue plugin. The legacy raw-ApexCharts src/components/UsageTrendChart.vue is deprecated — migrate to the wrapper under charts/.

ComponentPurpose
UsageTrendChart.vueLine chart — query volume over time.
CategoryDistributionChart.vueDonut chart — distribution of chats across service categories.
SatisfactionGauge.vueGauge chart — aggregate user-satisfaction score.
SatisfactionHeatmap.vueHeatmap — satisfaction by time × category.
TopQueriesChart.vueHorizontal bar — most frequent queries.

Layout / navigation

ComponentPurpose
App.vueRoot shell. Binds :data-theme="theme" on <div id="app">, owns the global notification toast (no NotificationSystem.vue — toasts are inline at App.vue lines 36–38 and the auto-dismiss timer around line 149). Mounts NavBarComponent, SideBarComponent, and <router-view>.
NavBarComponent.vueTop bar — logo, user menu, language selector, logout.
SideBarComponent.vueLeft sidebar — services tree + saved chats (see Sidebar & Navigation).
SplashScreen.vueInitial loading screen — logo + progress indicator.

Chat interface

ComponentPurpose
ChatBotComponent.vueMain chat window — message list, input, streaming indicator, status pill, context pills, confidence chip, grounding warning. See Chat UX.
ChatFolders.vueFolder CRUD UI (create/rename/delete) for the saved-chats sidebar.
ChatHistoryComponent.vueConversation list — search, filter, sort.
ChatResponseFeedbackDialog.vueTwo-column feedback dialog — thumbs + 1–5 rating + comment. See Chat UX → Feedback.
RightSideBarComponent.vueRight column — related documents + FAQ. See Sidebar & Navigation → Right sidebar.
WeatherPanel.vueContextual weather widget (right sidebar). Optional — see Sidebar & Navigation → Weather.

Admin & analytics

ComponentPurpose
AdminDashboard.vue8-tab admin surface (overview / hierarchy / documents / database / logs / query inspector / users / security). See Admin Dashboard.
AnalyticsDashboard.vueHigh-level analytics — KPIs + chart strip.
AnalyticsComponent.vueFilterable analytics view (date range, category).
UnifiedAnalytics.vueCombined view merging multiple metric panels.
QueryInspector/ (subfolder)Query log browser with detail view. See Admin Dashboard → Query Inspector.
QueryInspector.vueTop-level inspector — list + detail side-by-side.
QueryInspectorList.vueFilterable list of recent queries.
QueryInspectorDetail.vuePer-query detail (request, retrieved chunks, response, metadata).

Authentication & user profile

ComponentPurpose
CallbackView.vueOIDC redirect handler. /callback route — completes the Keycloak auth code flow.
DashboardView.vueDefault authenticated landing — wraps the chat UI.
UserProfileComponent.vueProfile view + edit (name, email, language).

Auth flow details live in Auth Flow.


Settings

ComponentPurpose
SettingsComponent.vueSettings panel — theme, font size, language overrides.
LanguageSelector.vueStandalone locale dropdown (also embedded in the navbar).

File management

ComponentPurpose
FileUploadComponent.vueDrag-and-drop upload widget (single file).
UploadFilesDialog.vueMulti-file upload dialog — drag-and-drop, allowed extensions, progress.
AddFromLinkDialog.vueURL crawl dialog — single page vs full-site async, depth setting.
FileDetailsDialog.vueFile detail modal — metadata tab + ingestion dashboard tab with live-dot crawl indicator.

Service / context

ComponentPurpose
ServiceTreePanelComponent.vueHierarchical tree of service categories (sidebar tab).
ServiceCategoryPanelComponent.vueSingle-category detail panel (children + descriptions).

Locale-aware labels are loaded via serviceTreeService.getAllCategories(locale). See Sidebar & Navigation → Service tree.


Shared widgets

ComponentPurpose
ConfirmDialog.vueGeneric confirmation dialog (confirm/cancel).
ModalDialog.vueGeneric modal wrapper (used when DsModal does not fit the use case).
ContextMenu.vueRight-click context menu with custom actions.
OperationResultsModal.vueBulk-operation result display (success/failure + per-operation detail).
LogSearchDialog.vueSearch interface for system logs.
SearchableCountryDropdown.vueCountry selector with text search.

Views — src/views/

ComponentPurpose
DashboardView.vueDefault authenticated view — composes the chat UI.
CallbackView.vueOIDC callback target — completes the auth code flow and redirects.

Component organization (file tree)

src/
├── App.vue                          # Root shell (data-theme, notifications, router-view)
├── views/                           # Router-level views (2)
│   ├── CallbackView.vue
│   └── DashboardView.vue
├── components/
│   ├── ds/                          # DS primitives (12)
│   ├── charts/                      # ApexCharts wrappers (5)
│   ├── admin/QueryInspector/        # Admin query log browser (3)
│   └── (top-level application + shared widgets, 29)
└── i18n/locales/                    # vue-i18n messages

The full file map with descriptions is in the tables above.


Notes

  • Vue 3 Options API only. Options API = component logic declared in data / computed / methods / watch blocks. Vue 3 supports this alongside Composition API’s setup() function. The GENIE.AI codebase uses Options API as the project convention — do not introduce <script setup> blocks in new code.
  • State: Vuex 4. See State Management.
  • Charts: ApexCharts via vue3-apexcharts (Vue 3 wrapper). Internal usage is via the per-chart components above — call them, do not import ApexCharts directly.
  • Routing: Vue Router. Routes in src/router/; views live in src/views/.
  • i18n: vue-i18n with translations in src/i18n/locales/. Whitelist is config-driven — see VUE_APP_AVAILABLE_LOCALES in Configuration and the i18n system overview.
  • Icons: Lucide — <LucideIcon name="chevron-right" /> style. The styling system and color tokens are defined in public/config/theme-variables.css and described in Theme System.