Skip to content

Components

BaklaVue provides a comprehensive Vue 3 UI kit that brings the Baklava Design System to your Vue applications. Every component is fully typed, composable, and built with Vue 3 best practices—giving you a native, delightful development experience.

Why BaklaVue?

Each component wraps Baklava's battle-tested web components under the hood, so you get enterprise-grade accessibility, theming, and design consistency—with Vue-native APIs like v-model, slots, and reactive props.

Overview

CategoryCountPurpose
Form9Inputs, selects, buttons, toggles, file upload, and date picking
Feedback7Alerts, badges, chips, tags, notifications, spinners, and skeleton loaders
Layout7Dialogs, drawers, dropdowns, tooltips, accordions, tabs, steppers
Navigation4Links, pagination, split buttons, scroll-to-top
Data3Tables, icons, and images

31 components in total—ready to build beautiful, consistent interfaces.


Form Components

Build forms and collect user input with purpose-built components. All form components support v-model, validation states, and full TypeScript inference.

ComponentDescription
ButtonPrimary, secondary, tertiary variants • Multiple kinds (default, neutral, success, danger) • Sizes, icons, loading state
InputText input with label, help text, validation • Types: text, email, password, number • Loading and disabled states
CheckboxSingle and grouped checkboxes • Indeterminate state • Custom slots and preferences
RadioRadio button groups with full v-model support
SwitchToggle switch for boolean settings • Multiple sizes
SelectSingle and multi-select dropdowns • Options via props or slots
TextareaMulti-line text input with validation
File UploadDrag-and-drop file upload with validation, preview, and file list
DatepickerDate selection with calendar popover

Feedback Components

Communicate status, guide users, and show progress. These components help you build clear, responsive feedback patterns.

ComponentDescription
AlertInline alerts for success, warning, error, info • Closable and programmatic control
BadgeCompact status indicators (e.g. counts, labels)
BannerFull-width top-of-page banner for announcements • Closable with localStorage persistence
ChipNotification badge on icons/avatars • Position, colors, sizes, standalone mode
TagLabels with optional close button • Selectable and customizable icons
NotificationToast-style notifications • Use composable useNotification for programmatic control
SkeletonAnimated placeholder for content loading • Text, rectangle, circle variants
SpinnerLoading spinner with size and variant options

Layout Components

Structure your UI with overlays, panels, and navigation patterns. Full control over open/close behavior and animations.

ComponentDescription
DialogModal dialogs with header, footer, caption • Programmatic open/close
DrawerSide drawer for navigation or forms • Left/right placement
DropdownDropdown menus with items, groups, and slots
TooltipContextual tooltips with placement control
AccordionCollapsible sections • Single or multiple open
TabTab navigation with slot-based panels
StepperStep indicator for wizards and multi-step flows

Help users move through your app and trigger actions.

ComponentDescription
LinkInternal and external links • Standalone and inline variants
PaginationPage navigation with jumper and select controls
ScrollToTopFloating button to scroll back to top • Configurable threshold and position
Split ButtonPrimary action with secondary dropdown options

Data Display

Render data and assets with consistent styling.

ComponentDescription
TableData tables with sorting, pagination, loading states • Custom cell slots
IconIcon component with size and color props
ImagePerformance-focused image with lazy loading, skeleton placeholder, and error fallback

Quick Start

Import and Use

Import components individually (recommended for tree-shaking):

vue
<template>
  <div class="form-example">
    <BvInput v-model="email" label="Email" type="email" />
    <BvButton variant="primary" @click="handleSubmit">Submit</BvButton>
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";
import { BvButton, BvInput } from "@baklavue/ui";

const email = ref("");

const handleSubmit = () => {
  console.log("Submitted:", email.value);
};
</script>

Or import everything:

typescript
import * as BaklaVue from "@baklavue/ui";

TypeScript

All components ship with full type definitions. Use inferred props or import types:

typescript
import type { ButtonProps } from "@baklavue/ui";

const props: ButtonProps = {
  variant: "primary",
  size: "medium",
};

Next Steps