spicykatsu
| Install | |
|---|---|
npm install spicykatsu |
|
| Latest Version: | 0.9.11 |
| Vue: | 3 |
| License: | MIT |
| Last Updated: | Jul 27, 2026 |
| Links: | npm |
SpicyKatsuLib
Fun, simple component library for Vue 3. Built as a personal playground for my website. Feel free to use it in your own projects.
Installation
npm install spicykatsu
Usage
Full Install (Recommended)
All components, styles, and directives are registered automatically. No extra imports needed.
import { createApp } from 'vue'
import App from './App.vue'
import { SpicyKatsu } from 'spicykatsu'
const app = createApp(App)
app.use(SpicyKatsu)
app.mount('#app')
Tree-Shakeable (For production optimization)
Import only the components and directives you need. Each component's CSS is bundled automatically via its <style> block. However, you must also import the CSS variables so components look correct.
import { createApp } from 'vue'
import App from './App.vue'
import { SpicyBtn, SpicyModal } from 'spicykatsu/SpicyBtn'
import { spicyRipple } from 'spicykatsu/spicyRipple'
// Import CSS variables (required for components to look correct)
import 'spicykatsu/styles/variables'
const app = createApp(App)
app.component('SpicyBtn', SpicyBtn)
app.component('SpicyModal', SpicyModal)
app.directive('spicyRipple', spicyRipple)
app.mount('#app')
You can also import base utility styles if you use .spicyText, .spicyHeader, or .spicyLink classes:
import 'spicykatsu/styles/base'
Or import all styles at once:
import 'spicykatsu/styles'
Plugin with selective options
You can also use the plugin with options to control what gets registered:
app.use(SpicyKatsu, {
useComponents: true, // Register all components globally (default: true)
useStyles: true, // Inject all styles into <head> (default: true)
useDirectives: true // Register v-spicyDrag and v-spicyRipple (default: true)
})
Set any to false to opt out of that part. For example, to register components yourself but still get styles injected:
app.use(SpicyKatsu, { useComponents: false })
To inject only CSS variables (useful when tree-shaking components but still using the plugin for style injection):
app.use(SpicyKatsu, { useComponents: false, useStyles: 'variables' })
Components
| Component | Description |
|---|---|
SpicyAccordion |
Collapsible sections, single or multi-open |
SpicyAlert |
Dismissible alerts with variants and auto-close |
SpicyBadge |
Pill/tag badges with variants, dot, and removable |
SpicyBtn |
Button with MDI icon support and ripple effect |
SpicyCarousel |
Image carousel with autoplay, touch, and pagination |
SpicyDataTable |
Data table with sorting, filtering, and pagination |
SpicyDialog |
Teleported overlay dialog |
SpicyDivider |
Horizontal or vertical divider |
SpicyDropdown |
Dropdown menu with click-outside close |
SpicyFileInput |
File input with drag-and-drop and multi-file preview |
SpicyModal |
Modal dialog with title, actions, and Escape-to-close |
SpicyProgress |
Linear and circular progress indicators |
SpicySelect |
Custom select with search, multi-select, and keyboard nav |
SpicySheet |
Styled container/card |
SpicySkeleton |
Loading placeholder with shimmer animation |
SpicySlider |
Range slider input |
SpicyTabs |
Tabbed interface with scrollable tab bar |
SpicyTextArea |
Styled textarea |
SpicyTextField |
Text input with floating label, prefix, and validation |
SpicyToast |
Toast notification system with auto-dismiss and positions |
SpicyToggle |
Toggle switch |
SpicyTooltip |
Hover tooltip with position control |
SpicyTree |
Recursive tree view |
Directives
| Directive | Description |
|---|---|
v-spicyDrag |
Makes any element draggable (mouse + touch). Options: axis, handle, disabled, bounds, grid, onDragStart, onDrag, onDragEnd |
v-spicyRipple |
Adds a Material-style ripple on click/touch. Options: color, center. Use data-no-ripple to disable |
Dev / Playground
Clone the repo and run:
bun install
bun run dev
The playground (playground/Playground.vue) has a live example of every component and directive.
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 0.9.11 | ^3.5.40 | MIT | |
| 0.9.10 | ^3.5.40 | MIT | |
| 0.9.9 | ^3.5.39 | MIT | |
| 0.9.8 | ^3.5.39 | MIT | |
| 0.9.7 | ^3.5.39 | MIT | |
| 0.9.6 | ^3.5.39 | MIT | |
| 0.9.5 | ^3.5.39 | MIT | |
| 0.9.4 | ^3.5.39 | MIT | |
| 0.9.3 | ^3.5.39 | MIT | |
| 0.9.2 | ^3.5.39 | MIT | |
| 0.9.1 | ^3.5.39 | MIT | |
| 0.9.0 | ^3.5.39 | MIT | |
| 0.8.0 | ^3.5.39 | MIT | |
| 0.5.0 | ^3.5.38 | MIT | |
| 0.4.1 | ^3.5.33 | MIT | |
| 0.4.0 | ^3.5.33 | MIT | |
| 0.3.0 | ^3.5.33 | MIT | |
| 0.0.55 | ^3.5.8 | MIT | |
| 0.0.54 | ^3.5.8 | MIT | |
| 0.0.53 | ^3.5.8 | MIT | |
| 0.0.52 | ^3.5.8 | MIT | |
| 0.0.51 | ^3.5.6 | MIT | |
| 0.0.43 | ^3.4.38 | MIT | |
| 0.0.42 | ^3.4.38 | MIT | |
| 0.0.41 | ^3.4.38 | MIT | |
| 0.0.40 | ^3.4.38 | MIT | |
| 0.0.39 | ^3.4.38 | MIT | |
| 0.0.38 | ^3.4.23 | MIT | |
| 0.0.37 | ^3.4.23 | MIT | |
| 0.0.36 | ^3.4.23 | MIT |
Showing the latest 30 of 39. See every release on npm