@reelkit/vue
| Install | |
|---|---|
npm install @reelkit/vue |
|
| Latest Version: | 0.9.1 |
| Vue: | 3 |
| License: | MIT |
| Last Updated: | Oct 22, 2026 |
| Links: | GitHub · npm |
@reelkit/vue
Vue 3 bindings for @reelkit/core. Drop in a <Reel> component, give it a slide count and an item slot — it handles virtualization, gestures, and keyboard/wheel input. ~5.2 kB gzip.
Live Demo · Open in StackBlitz
Installation
npm install @reelkit/vue
Quick Start
<script setup lang="ts">
import { Reel, ReelIndicator } from '@reelkit/vue';
</script>
<template>
<Reel :count="100" direction="vertical" enable-wheel>
<template #item="{ index, size }">
<div :style="{ width: `${size[0]}px`, height: `${size[1]}px` }">
Slide {{ index + 1 }}
</div>
</template>
<!-- Auto-connects to parent Reel via context -->
<ReelIndicator />
</Reel>
</template>
Features
<Reel>— virtualized slider, keeps only 3 slides in the DOM<ReelIndicator>— dot indicators that auto-connect to the parent<Reel>via provide/inject- Measures its own size via ResizeObserver — no width/height props needed
- Swipe with momentum and snap, keyboard arrows, mouse wheel
- Loop mode for infinite circular scrolling
- Tree-shakeable transitions (slide, cube, fade, flip, zoom)
- Overlay building blocks —
SwipeToClose,SoundProvider,useFullscreen,useBodyLock,useOverlayUrlState - Full WAI-ARIA carousel accessibility
- Typed with TypeScript, no
@typespackage needed
API
Reel Props
| Prop | Type | Default | Description |
|---|---|---|---|
count |
number |
required | Number of slides |
direction |
'horizontal' | 'vertical' |
'vertical' |
Slide direction |
initialIndex |
number |
0 |
Starting slide index |
loop |
boolean |
false |
Enable infinite loop |
swipeDistanceFactor |
number |
0.12 |
Swipe threshold (0-1) |
transitionDuration |
number |
300 |
Animation duration in ms |
enableNavKeys |
boolean |
true |
Enable keyboard navigation |
enableWheel |
boolean |
false |
Enable mouse wheel navigation |
wheelDebounceMs |
number |
200 |
Wheel debounce duration |
enableGestures |
boolean |
true |
Enable touch/mouse gestures |
transition |
TransitionTransformFn |
slide | Transition effect function |
size |
[number, number] |
auto | Explicit [width, height] |
Reel Events
| Event | Payload | Description |
|---|---|---|
afterChange |
index, indexInRange |
After slide change |
beforeChange |
index, nextIndex, inRange |
Before slide change |
tap |
GestureCommonEvent |
Single tap |
doubleTap |
GestureCommonEvent |
Double tap |
longPress |
GestureCommonEvent |
Long press detected |
longPressEnd |
GestureEvent |
Long press released |
ReelIndicator Props
| Prop | Type | Default | Description |
|---|---|---|---|
count |
number |
context | Total number of slides |
active |
number |
context | Currently active slide index |
direction |
'horizontal' | 'vertical' |
'vertical' |
Dot axis |
radius |
number |
3 |
Dot radius in pixels |
visible |
number |
5 |
Number of visible dots |
gap |
number |
4 |
Space between dots |
onDotClick |
(index) => void |
- | Callback when dot is clicked |
Composables
| Composable | Description |
|---|---|
useBodyLock |
Lock body scroll for overlays |
useFullscreen |
Fullscreen API with cross-browser support |
useSoundState |
Access sound controller from SoundProvider |
useReelContext |
Access parent Reel's index, count, and goTo |
useOverlayUrlState |
Keeps the open overlay and its slide in the URL, so a link reopens the view |
toVueRef wraps a core Signal as a Vue ref — reading signal.value straight
in a template compiles to a static snapshot that never updates.
Components
| Component | Description |
|---|---|
SwipeToClose |
Swipe-to-dismiss wrapper for overlays |
SoundProvider |
Provides shared sound mute/unmute state |
Documentation
Guide at reelkit.dev/docs/vue/guide, full API reference at reelkit.dev/docs/vue/api.
Contributing
Issues and pull requests are welcome. The contributing guide covers setting up the workspace, making a change, and what a pull request needs.
Support
If ReelKit saved you some time, a star on GitHub would mean a lot — it's a small thing, but it really helps the project get noticed.
License
Related Packages
VueJS responsive and customizable image and video gallery, carousel and lightbox...
Most modern mobile touch slider and framework with hardware accelerated transiti...
Lightweight Vue 3 pull-to-refresh component and composable with touch/mouse gest...
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 0.9.1 | >=3.0.0 | MIT | |
| 0.9.0 | >=3.0.0 | MIT | |
| 0.8.0 | >=3.0.0 | MIT | |
| 0.7.2 | >=3.0.0 | MIT | |
| 0.7.1 | >=3.0.0 | MIT | |
| 0.7.0 | >=3.0.0 | MIT | |
| 0.6.1 | >=3.0.0 | MIT | |
| 0.6.0 | >=3.0.0 | MIT | |
| 0.5.0 | >=3.0.0 | MIT | |
| 0.4.0 | >=3.0.0 | MIT | |
| 0.3.0 | >=3.0.0 | MIT | |
| 0.2.0 | >=3.0.0 | MIT | |
| 0.1.0 | >=3.0.0 | MIT |
