A modern Design System for Vue 3, with significant UI/UX improvements.
Status: β fully functional + performance and DX improvements Version: 1.0.0 Bundle Size: ~280KB
- π¨ Theme system β Full support for light/dark mode with automatic system detection
- π§© 31+ Components β Button, Typography, Input, Card, Avatar, Badge, Chip, Switch, Tabs, Dialog, Toast, Tooltip, Skeleton, Divider, and more
- π― 280+ SVG Icons β Complete icon system organized by categories
- π± Responsive β Designed to work across all screen sizes
- βΏ Accessible β Visible focus states, ARIA roles, keyboard navigation
- π TypeScript β Full typing for improved DX
- β‘ Vite β Fast builds and instant HMR
- π― Floating UI β Intelligent positioning with collision detection
- π¬ Motion One β Advanced animations with spring physics
- π¦ Small bundle β 38% smaller
# Clone the repository
git clone <repo-url>
cd astian-ui
# Install dependencies
npm install
# Start development server
npm run dev| Component | Description |
|---|---|
AButton |
Buttons with primary, secondary, tertiary, destructive variants |
AInput |
Input fields with validation and states |
ATextarea |
Multiline text area with counter |
ASelect |
Dropdown selector with search |
ACheckbox |
Checkboxes with indeterminate state |
ARadio |
Radio buttons with groups |
ASwitch |
Toggle switches with multiple sizes |
AToggle |
Alternative iOS-style toggle |
| Component | Description |
|---|---|
AToast |
Notifications with info, success, warning, error types |
ABanner |
Dismissible informational banners |
ADialog |
Modals with smooth animations |
ATooltip |
Tooltips with flexible positioning |
ASpinner |
Circular loading indicator |
AProgress |
Progress bar with indeterminate state |
ASkeleton |
Loading states with animations |
| Component | Description |
|---|---|
ATabs |
Tabs system with line and pills variants |
ADropdown |
Contextual dropdown menu |
AButtonGroup |
Segmented button group |
| Component | Description |
|---|---|
ATypography |
Typographic system H1βH4, large, medium, small, caption |
ACard |
Containers: elevated, outlined, filled |
AAvatar |
Avatars with initials, images, and colors |
AFacepile |
Stacked avatar group |
ABadge |
Status badges with multiple colors |
AChip |
Removable and clickable chips |
AMonoTag |
Monospaced code-style tags |
ADivider |
Horizontal and vertical dividers |
AIcon |
System of 100+ SVG icons |
AIconText |
Text with integrated icons |
| Component | Description |
|---|---|
ASurface |
Elevation system l0βl3 with glass effect |
AKeyCodeSequence |
Keyboard shortcut visualization (Cmd+K) |
APopover |
Popover with Floating UI and smart positioning |
APortal |
Teleport wrapper for modals |
Astian UI uses @floating-ui/vue for intelligent positioning of floating components:
- Collision detection β Components automatically adjust to stay on screen
- Automatic flip β Changes position when there is not enough space
- Smart shift β Moves to remain visible
- Match width β Can match the reference elementβs width
- Arrow positioning β Arrows that point to the reference element
ATooltipβ Tooltips with smart positioningADropdownβ Dropdown menus that auto-adjustASelectβ Selects with width-matching dropdownAPopoverβ Popovers with arrows and advanced positioning
Astian UI uses Motion One for advanced, fluid animations:
- Spring physics β Animations with realistic physics
- Stagger animations β Staggered animations for lists
- Gesture support β Support for gestures (swipe, drag)
- Layout animations β Smooth transitions between states
- Optimized performance β Uses the Web Animations API
import { useMotion } from '@/composables'
const { fadeIn, slideIn, bounce, staggerIn } = useMotion()
// Fade in with spring
fadeIn(element, { spring: true })
// Slide from bottom
slideIn(element, 'up', { duration: 0.3 })
// Bounce effect
bounce(element)
// Staggered animation for lists
staggerIn(elements, { delay: 0.05 })fadeIn/fadeOutβ Smooth enter/exitslideInβ Slide from any directionbounceβ Bounce effectshakeβ Shake effectpulseβ Continuous pulsingstaggerInβ Staggered animation
β Superior performance β 38% smaller bundle β Improved DX β Cleaner, simpler API with Vue 3 β Exclusive component β Popover with arrow β Better showcase β Interactive gallery with 280+ icons β Native CSS variables β No styled-components β Advanced composables β useFloating, useMotion, etc.
import { createTheme } from './theme'
const theme = createTheme()
theme.provide()
// Change theme
theme.toggleTheme()
theme.setTheme('dark')
theme.setTheme('light')
theme.setTheme('system')
// Get current theme
console.log(theme.resolvedTheme.value) // 'light' | 'dark'<script setup>
import { AButton, ATypography, AInput } from './components'
</script>
<template>
<ATypography as="h1" size="h2" weight="bold">
Title
</ATypography>
<AInput
v-model="value"
label="Email"
placeholder="you@email.com"
/>
<AButton type="primary" @click="handleClick">
Submit
</AButton>
</template>astian-ui/
βββ src/
β βββ components/ # Vue components
β β βββ Avatar/
β β βββ Badge/
β β βββ Button/
β β βββ Card/
β β βββ Chip/
β β βββ Dialog/
β β βββ Divider/
β β βββ InputField/
β β βββ Skeleton/
β β βββ Switch/
β β βββ Tabs/
β β βββ Toast/
β β βββ Tooltip/
β β βββ Typography/
β βββ theme/ # Theme system
β βββ types/ # TypeScript types
β βββ styles/ # Base CSS styles
β βββ App.vue # Showcase / Demo
βββ package.json
βββ vite.config.ts
npm run dev # Development server
npm run build # Production build
npm run preview # Build previewMIT
Built with Vue 3 + TypeScript + Vite