mood-ui

Vue 3 component library with full theming, dark mode, palettes, calendar, scheduler, table and AppShell.
4,747 54
Install
npm install mood-ui
Latest Version:0.12.1
Vue:3
License:MIT
Last Updated:Aug 9, 2026
Links: GitHub  ·  npm
Maintainer: alansinbailarin

mood-ui

The Vue 3 component library with the best vibes.

npm version npm downloads License: MIT Vue 3 Tailwind v4

81+ accessible components · reactive theming · dark mode · i18n (ES + EN) · built with Vue 3, TypeScript & Tailwind v4.

→ Live docs & playground · npm · Changelog


Why mood-ui?

  • Reactive theming — change color, radius, size, halo and dark/light mode at runtime. Every component reacts instantly.
  • Dark mode + surfaces — 6 dark surface presets (navy, zinc, charcoal…) or tune all 14 semantic tokens yourself.
  • i18n built-in — Spanish & English included. Switch globally with useLocale().set('es').
  • Accessibility first — WAI-ARIA roles, focus rings, keyboard nav and screen readers covered out of the box.
  • Tree-shakeable · TypeScript — import only what you use. Full types, IntelliSense autocomplete, ESM + CJS.
  • Tailwind v4 native — CSS vars, design tokens and @theme inline. Override from your own config, no hacks needed.

Install

npm install mood-ui

# Required peer dependency:
npm install vue@^3.4

# Optional peers — install only the ones you actually use. mood-ui is
# tree-shakeable, so importing a component never pulls a peer it doesn't need.
npm install @heroicons/vue@^2   # icons — many components (forms, Table, Calendar, navigation…)
npm install gsap@^3             # animations — Toast, Drawer, Modal, Banner, Calendar & Scheduler

If you hit Cannot find package '@heroicons/vue' or 'gsap', a component you imported uses it — install the named package. You only need the peers for the components you actually use.

v0.10.0 — consistent sizes. Every component now shares one size scale, so a medium Button, Input and Avatar are the same height (control height 32/36/40/48 px for xsmall/small/medium/large). Migration: the previous small is now xsmall, and small is a new in-between size. If you relied on the old small height, switch those usages to xsmall.

Setup

Import the stylesheet once at your app entry:

// main.ts
import { createApp } from "vue";
import App from "./App.vue";
import "mood-ui/style.css";

createApp(App).mount("#app");

Wrap your app in <ModoProvider> to expose all design tokens to every component:

<script setup lang="ts">
import { ref } from "vue";
import { ModoProvider, Button, paletteFromHex } from "mood-ui";

const primary = ref("#6366f1");
</script>

<template>
  <ModoProvider
    color="primary"
    radius="medium"
    size="medium"
    :palettes="{ primary: paletteFromHex(primary) }"
  >
    <Button color="primary">Hello mood-ui</Button>
  </ModoProvider>
</template>

Powerhouse components — free, no license required

Most UI libraries charge for these. mood-ui ships them out of the box.

<Table> — AG Grid-level features, zero cost

<Table
  :data="rows"
  :columns="cols"
  virtual              <!-- renders 100k rows at constant speed -->
  tree                 <!-- hierarchical rows with lazy loading -->
  server-side          <!-- delegate sort/filter/page to your API -->
  resizable            <!-- drag column edges to resize -->
  reorderable          <!-- drag headers to reorder -->
  :multi-sort="true"   <!-- shift+click for multi-column sort -->
  v-model:state="savedState"  <!-- persist everything to localStorage/URL in one line -->
/>

Full feature list: sorting · multi-sort · single/multi selection · per-column filters · row expansion · client & server-side pagination · column resize & reorder · virtualization (constant render time for 100k+ rows) · tree rows with lazy loadChildren · row grouping · state snapshot (v-model:state).


<Scheduler> — FullCalendar-level, zero cost

<Scheduler
  :resources="rooms"
  :events="bookings"
  :draggable-events="true"      <!-- drag events between time slots -->
  :resizable-events="true"      <!-- resize event duration -->
  :allow-cross-resource-drag="true"
  :business-hours="officeHours"
  :prevent-overlap="true"
  format="12h"
/>

Full feature list: resource rows · drag & drop events · resize events · cross-resource drag · range selection · business hours · disabled time ranges · all-day row · current time indicator · keyboard navigation · 12h/24h · readonly mode.


Calendar suite — 5 views included

Calendar · MonthView · WeekView · DayView · AgendaView — all with locale support, min/max dates, disabled dates/weekdays, and full theming via ModoProvider.


All components

Category Components
Forms Button ButtonGroup FormField Input Textarea PasswordInput NumberInput SearchInput Select MultiSelect Combobox Checkbox Radio RadioGroup Switch Slider RangeSlider FileInput DateField DateRangeField DateTimeField
Feedback Badge Banner Chip Drawer Loader Modal Skeleton Tooltip Toast ToastContainer ConfirmDialog EmptyState ProgressBar
Layout AppShell Canvas Container Divider Stack HStack VStack PageHeader PopoverPanel Sidebar SidebarRow Topbar
Navigation Tabs Breadcrumbs DropdownMenu Pagination
Data display Card Typography Avatar AvatarGroup Table TableColumn TablePagination Calendar MonthView WeekView DayView AgendaView Scheduler DateRangePicker DateTimePicker

Composables

useModoConfig · useResolvedColor · useResolvedRadius · useResolvedSize · useResolvedTheme · useResolvedHalo · useColorMode · useToast · useConfirm · useModoLocale · useLocaleString


Contributing

mood-ui is open source and open to contributions. Whether it's fixing a bug, proposing a new component, improving docs or just giving feedback — every bit helps.

# 1. Fork & clone
git clone https://github.com/alansinbailarin/mood-ui.git
cd mood-ui

# 2. Install dependencies
npm install

# 3. Start the development showroom
npm run dev
  • Check open issues or open a new one to discuss your idea first.
  • Submit changes as a Pull Request against main.
  • Follow the existing patterns: Vue 3 + TypeScript + Tailwind v4, one component per file.

If mood-ui saves you time, a ⭐ on GitHub goes a long way — it helps other developers discover the library.


License

MIT © alansinbailarin

Related Packages

@itguy614/clean-ui

A clean, dark-mode-ready Vue 3 component library — 100+ token-driven, themeable,...

2,243 0
@1337exp/taoui

Design-token driven Vue 3 / Nuxt component library: one size scale, dark and lig...

6,129 0
brutx-ui-vue

A Neo-Brutalism styled Vue 3 UI component library

10,283 4
@sabrenski/spire-ui-vue

A modern, themeable Vue 3 component library with 57+ components, TypeScript supp...

42,505
@juxtui/ui

Accessible, polished UI components for Nuxt & Vue 3.

1,648 0

Version History

Version Released Vue License
0.12.1 ^3.4.0 MIT
0.12.0 ^3.4.0 MIT
0.11.0 ^3.4.0 MIT
0.10.0 ^3.4.0 MIT
0.9.3 ^3.4.0 MIT