### Installation & Import Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/quick-reference.md Shows how to install and import keen-slider for various environments. ```javascript // NPM npm install keen-slider // Browser // ES6 modules import KeenSlider from 'keen-slider' // CommonJS const KeenSlider = require('keen-slider').default // React import { useKeenSlider } from 'keen-slider/react' // Vue 3 import { useKeenSlider } from 'keen-slider/vue' // React Native import { useKeenSliderNative } from 'keen-slider/react-native' ``` -------------------------------- ### Responsive Patterns - Breakpoints Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/quick-reference.md Example configuration for responsive slides per view using breakpoints. ```typescript { slides: { perView: 1 }, breakpoints: { '(min-width: 480px)': { slides: { perView: 2 } }, '(min-width: 768px)': { slides: { perView: 3 } }, } } ``` -------------------------------- ### Custom rendering Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/quick-reference.md Example of using custom rendering mode and handling slide transformations and opacity. ```typescript const slider = new KeenSlider(container, { renderMode: 'custom' }) slider.on('detailsChanged', (instance) => { instance.slides.forEach((slide, idx) => { const d = instance.track.details.slides[idx] const offset = d.distance * instance.size slide.style.transform = `translateX(${offset}px)` slide.style.opacity = d.portion.toString() }) }) ``` -------------------------------- ### Virtualize large lists Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/quick-reference.md Hint for virtualizing large lists, with a React example using `react-window`. ```typescript // React example with virtualization import { FixedSizeList } from 'react-window' ``` -------------------------------- ### Complete Configuration Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/configuration.md A comprehensive example demonstrating various configuration options for Keen Slider. ```typescript const slider = new KeenSlider( '.carousel', { // Core initial: 0, loop: true, range: { min: 0, max: 10 }, rtl: false, defaultAnimation: { duration: 600, easing: (t) => 1 + --t * t * t * t * t, }, // Web/DOM disabled: false, selector: '.slide', slides: { number: null, perView: 3, spacing: 20, origin: 'center', }, vertical: false, breakpoints: { '(max-width: 768px)': { slides: { perView: 1, spacing: 10 }, }, }, // Drag drag: true, dragSpeed: 1, rubberband: true, // Animation mode: 'snap', // Rendering renderMode: 'precision', // Hooks created: (instance) => { console.log('Slider created') }, slideChanged: (instance) => { console.log('Slide:', instance.track.details?.abs) }, }, [customPlugin] ) ``` -------------------------------- ### TypeScript Usage Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/quick-reference.md Basic TypeScript setup for Keen Slider, including instance type and event handling. ```typescript import KeenSlider, { KeenSliderInstance } from 'keen-slider' let slider: KeenSliderInstance slider = new KeenSlider('.carousel', { loop: true, }) slider.on('slideChanged', (instance) => { console.log(instance.track.details?.abs) }) ``` -------------------------------- ### next Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/slider-instance.md Example for using the next method. ```typescript slider.next(); ``` -------------------------------- ### dragStarted Hook Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/drag-plugin.md Example of listening to the 'dragStarted' event. ```typescript slider.on('dragStarted', (instance) => { console.log('Drag started at position:', instance.track.details.position) }) ``` -------------------------------- ### Initial Slide Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/configuration.md Starting slide index. ```typescript new KeenSlider(container, { initial: 2, // Start at 3rd slide }) ``` -------------------------------- ### prev Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/slider-instance.md Example for using the prev method. ```typescript slider.prev(); ``` -------------------------------- ### Keen Slider Plugin Example Source: https://github.com/rcbyr/keen-slider/blob/master/docs/web.md An example of creating and using a plugin with Keen Slider, including listening to the 'created' event. ```javascript var slider = new KeenSlider( '#my-slider', { loop: true, }, [ slider => { slider.on('created', () => { alert('Hello World') }) }, ] ) ``` -------------------------------- ### Usage Example - Listen for animationStarted hook Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/animator.md Example of logging the target slide index when an animation starts. ```typescript slider.on('animationStarted', (instance) => { console.log('Animating to slide:', instance.animator.targetIdx); }); ``` -------------------------------- ### dragged Hook Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/drag-plugin.md Example of listening to the 'dragged' event. ```typescript slider.on('dragged', (instance) => { const position = instance.track.details.position console.log('Dragging at position:', position) }) ``` -------------------------------- ### moveToIdx Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/slider-instance.md Examples demonstrating how to use the moveToIdx method with different parameters. ```typescript // Move to slide 3 (absolute index) slider.moveToIdx(3, true); // Move to slide 1 relative to current position slider.moveToIdx(1, false); // Custom animation timing slider.moveToIdx(2, true, { duration: 1000, easing: t => 1 + --t * t * t * t * t // Quint easing }); ``` -------------------------------- ### Animator start keyframes Source: https://github.com/rcbyr/keen-slider/blob/master/docs/react-native.md Example of how to start a new animation with keyframes using the animator module. ```typescript slider.animator.start([keyframe1, keyframe2]) ``` -------------------------------- ### Manual Rendering Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/renderer-web-plugin.md Example demonstrating manual DOM updates in custom render mode using the 'detailsChanged' hook. ```typescript const slider = new KeenSlider(container, { renderMode: 'custom' }) slider.on('detailsChanged', (instance) => { // Manually update DOM based on track details const details = instance.track.details instance.slides.forEach((slide, idx) => { const slideDetails = details.slides[idx] const offset = slideDetails.distance * instance.size slide.style.transform = `translateX(${offset}px)` }) }) ``` -------------------------------- ### TrackInstance Interface - init Method Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/track.md Usage example for the init method. ```typescript slider.track.init(0); // Reset to first slide slider.track.init(2); // Initialize at slide 2 ``` -------------------------------- ### Container Sizing with getBoundingClientRect Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/renderer-web-plugin.md Example of using `getBoundingClientRect()` to get accurate container sizing. ```typescript const rect = container.getBoundingClientRect() const size = rect.width // or rect.height for vertical ``` -------------------------------- ### Breakpoints Configuration Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/configuration.md Example of configuring responsive options using media queries. ```typescript { breakpoints: { '(min-width: 768px)': { slides: { perView: 3, spacing: 10 }, }, '(min-width: 1024px)': { slides: { perView: 4, spacing: 15 }, }, } } ``` -------------------------------- ### Accessing the container size Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/renderer-web-plugin.md Example of how to get the width or height of the container in pixels. ```typescript const containerSize: number = slider.size ``` -------------------------------- ### Real-World Example: Thumbnail Plugin Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/plugins-architecture.md A comprehensive example of a thumbnail plugin for Keen Slider, including event handling, state management, and exposing custom methods. ```typescript interface ThumbnailContext { selectThumbnail: (idx: number) => void } const thumbnailPlugin: KeenSliderPlugin<{}, ThumbnailContext> = ( slider ) => { let thumbnails: HTMLElement[] = [] slider.on('created', (instance) => { // Find thumbnail elements const container = instance.container thumbnails = Array.from( container.querySelectorAll('[data-thumbnail]') ) as HTMLElement[] // Click handlers thumbnails.forEach((thumb, idx) => { thumb.addEventListener('click', () => { instance.moveToIdx(idx, true) }) }) // Highlight initial thumbnail updateActiveThumbnail(0) }) slider.on('slideChanged', (instance) => { updateActiveThumbnail(instance.track.details?.abs ?? 0) }) const updateActiveThumbnail = (idx: number) => { thumbnails.forEach((thumb, i) => { thumb.classList.toggle('active', i === idx) }) } // Expose method slider.selectThumbnail = (idx: number) => { slider.moveToIdx(idx, true) } slider.on('destroyed', () => { thumbnails.forEach((thumb) => { thumb.removeEventListener('click', () => {}) }) thumbnails = [] }) } ``` -------------------------------- ### Installation with npm Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/README.md Install Keen Slider using npm. ```bash npm install keen-slider ``` -------------------------------- ### Updating and moving to a specific slide example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/renderer-web-plugin.md Example of updating slider options and moving to a specific slide index. ```typescript // Update and move to specific slide slider.update({ loop: false }, 0) ``` -------------------------------- ### Animator Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/README.md Starting and stopping animations using the animator with keyframes and easing functions. ```typescript slider.animator.start([ { distance: 100, duration: 500, easing: t => 1 + --t * t * t * t * t } ]) slider.animator.stop() ``` -------------------------------- ### on Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/slider-instance.md Examples showing how to listen for and remove event listeners using the on method. ```typescript // Listen for slide changes slider.on('slideChanged', (instance) => { console.log('Current slide:', instance.track.details.abs); }); // Listen for drag end slider.on('dragEnded', (instance) => { console.log('Drag ended at position:', instance.track.details.position); }); // Remove listener const callback = (s) => { /* ... */ }; slider.on('created', callback); slider.on('created', callback, true); // Remove listener ``` -------------------------------- ### Auto-play Plugin Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/plugins-architecture.md A plugin that automatically advances slides at a set interval and provides methods to start and stop the autoplay. ```typescript const autoPlayPlugin = (slider) => { let autoplayId = null const start = () => { autoplayId = setInterval(() => { slider.next() }, 3000) // 3 seconds } const stop = () => { clearInterval(autoplayId) } slider.on('created', start) slider.on('dragStarted', stop) slider.on('dragEnded', start) slider.on('destroyed', stop) // Expose control methods slider.autoplay = { start, stop } } // Usage const slider = new KeenSlider(container, {}, [autoPlayPlugin]) slider.autoplay.stop() ``` -------------------------------- ### emit Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/slider-instance.md Examples for manually emitting hook events. ```typescript slider.emit('created'); slider.emit('slideChanged'); ``` -------------------------------- ### Testing Plugins Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/plugins-architecture.md An example of how to test Keen Slider plugins using a testing framework like Jest, including setup, teardown, and assertion of plugin behavior. ```typescript describe('MyPlugin', () => { let slider: KeenSliderInstance let container: HTMLElement beforeEach(() => { container = document.createElement('div') container.innerHTML = '
' document.body.appendChild(container) slider = new KeenSlider( container.querySelector('.keen-slider'), {}, [myPlugin] ) }) afterEach(() => { slider?.destroy() document.body.removeChild(container) }) it('should initialize correctly', () => { expect(slider.myProperty).toBeDefined() }) it('should respond to slide changes', (done) => { slider.on('slideChanged', () => { expect(slider.stats.slideChanges).toBe(1) done() }) slider.next() }) }) ``` -------------------------------- ### React Props Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/quick-reference.md Example of using React state and effects to manage slider properties like `perView` based on window size. ```typescript const [perView, setPerView] = useState(1) const [ref, slider] = useKeenSlider({ slides: { perView } }) useEffect(() => { const handleResize = () => { setPerView(window.innerWidth > 768 ? 3 : 1) } window.addEventListener('resize', handleResize) return () => window.removeEventListener('resize', handleResize) }, []) ``` -------------------------------- ### Plugin Ordering Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/plugins-architecture.md Demonstrates how plugins are executed in order and how later plugins can depend on earlier ones. ```typescript const slider = new KeenSlider( container, options, [ plugin1, // Executed first plugin2, // Can rely on plugin1 plugin3, // Can rely on plugin1 and plugin2 ] ) ``` -------------------------------- ### Update Configuration - With Slide Navigation Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/configuration.md Example of updating options and moving to a specific slide. ```typescript // Update and move to slide slider.update({ loop: false }, 0) ``` -------------------------------- ### Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/track.md An example demonstrating how to access and use the track details within a 'detailsChanged' event listener. ```typescript slider.on('detailsChanged', (instance) => { const details = instance.track.details; console.log('Active slide:', details.abs); console.log('Position:', details.position); console.log('Progress:', details.progress); console.log('Visible slides:', details.slides.filter(s => s.portion > 0) ); }); ``` -------------------------------- ### TrackInstance Interface - to Method Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/track.md Usage example for the to method. ```typescript slider.track.to(0); // Move to position 0 slider.track.to(100); // Move to position 100 ``` -------------------------------- ### Update Configuration - Multiple Options Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/configuration.md Example of updating multiple configuration options at runtime. ```typescript // Update multiple options slider.update({ drag: false, rubberband: false, renderMode: 'performance', }) ``` -------------------------------- ### dragEnded Hook Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/drag-plugin.md Example of listening to the 'dragEnded' event. ```typescript slider.on('dragEnded', (instance) => { console.log('Drag ended at position:', instance.track.details.position) console.log('Final velocity:', instance.track.velocity()) }) ``` -------------------------------- ### Pre-initialization Validation Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/errors.md Example demonstrating how to perform runtime checks on the container, options, and plugins before initializing Keen Slider. ```typescript // Check container exists const container = document.querySelector('.carousel') if (!container) { console.error('Container not found') process.exit(1) } // Validate options const options = { initial: 0, mode: 'snap', // Verify is valid mode slides: { perView: 3 }, // Verify slide config } // Validate plugins const plugins = [myPlugin] // Verify each is a function plugins.forEach(p => { if (typeof p !== 'function') { throw new Error('Plugin must be a function') } }) // Initialize const slider = new KeenSlider(container, options, plugins) ``` -------------------------------- ### TrackInstance Interface - absToRel Method Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/track.md Usage example for the absToRel method. ```typescript const relIdx = slider.track.absToRel(5); // Convert index 5 to relative ``` -------------------------------- ### update Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/slider-instance.md Examples demonstrating how to use the update method to change options or reinitialize the track. ```typescript // Update options slider.update({ mode: 'free-snap', drag: false, }); // Update and move to slide 0 slider.update({ loop: false }, 0); // Just reinitialize track slider.update(); ``` -------------------------------- ### Custom Hooks Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/plugins-architecture.md Demonstrates how to define and emit custom hooks within a plugin, and how to listen for them. ```typescript const customHookPlugin = (slider) => { slider.on('created', () => { // Emit custom hook slider.emit('myCustomHook') }) } const slider = new KeenSlider( container, { myCustomHook: (instance) => { console.log('Custom hook fired') } }, [customHookPlugin] ) ``` -------------------------------- ### Documenting Plugins Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/plugins-architecture.md Example of JSDoc comments for documenting a plugin, including its purpose, parameters, and usage examples. ```typescript /** * Autoplay plugin for KeenSlider * @param {KeenSliderInstance} slider - Slider instance * @example * const slider = new KeenSlider(container, {}, [autoPlayPlugin]) * slider.autoplay.stop() */ const autoPlayPlugin = (slider) => { // Implementation } ``` -------------------------------- ### destroy Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/slider-instance.md Example for using the destroy method. ```typescript slider.destroy(); // DOM is restored, events are cleaned up ``` -------------------------------- ### TrackInstance Interface - add Method Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/track.md Usage example for the add method. ```typescript slider.track.add(0.5); // Move forward by 0.5 units slider.track.add(-0.3); // Move backward by 0.3 units ``` -------------------------------- ### Updating options example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/renderer-web-plugin.md Example of updating slider options to change mode and disable dragging. ```typescript // Update options slider.update({ mode: 'free-snap', drag: false }) ``` -------------------------------- ### React Native Plugin Example Source: https://github.com/rcbyr/keen-slider/blob/master/docs/react-native.md An example of creating and using a plugin with Keen Slider in a React Native environment. The plugin listens for the 'created' event and shows an alert. ```typescript const slider = useKeenSliderNative( { slides: 4, }, [ slider => { slider.on('created', () => { alert('Hello World') }) }, ] ) ``` -------------------------------- ### TrackInstance Interface - idxToDist Method Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/track.md Usage example for the idxToDist method. ```typescript // Distance to slide 3 const dist = slider.track.idxToDist(3, true); // Distance from current position const relDist = slider.track.idxToDist(1); // Distance from specific position const fromDist = slider.track.idxToDist(5, true, 0); ``` -------------------------------- ### dragChecked Hook Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/drag-plugin.md Example of listening to the 'dragChecked' event. ```typescript slider.on('dragChecked', (instance) => { console.log('Drag validated as swipe') }) ``` -------------------------------- ### TrackInstance Interface - distToIdx Method Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/track.md Usage example for the distToIdx method. ```typescript const idx = slider.track.distToIdx(100); ``` -------------------------------- ### Navigate Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/README.md Examples of navigating slides programmatically. ```typescript slider.next() // Next slide slider.prev() // Previous slide slider.moveToIdx(2) // Jump to slide 2 slider.moveToIdx(2, true, { // Custom animation duration: 800, easing: t => t * t }) ``` -------------------------------- ### Basic CSS Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/quick-reference.md Core CSS classes and properties for styling Keen Slider. ```css .keen-slider { overflow: hidden; } .keen-slider__slide { /* Position will be set by renderer */ } /* Vertical layout */ .keen-slider[data-keen-slider-v] { display: flex; flex-direction: column; } /* RTL layout */ .keen-slider[data-keen-slider-reverse] { direction: rtl; } /* Disabled state */ .keen-slider[data-keen-slider-disabled] { opacity: 0.5; pointer-events: none; } ``` -------------------------------- ### Velocity Calculation Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/drag-plugin.md Example of retrieving the swipe velocity after drag ends. ```typescript slider.on('dragEnded', (instance) => { const velocity = instance.track.velocity() console.log('Swipe velocity:', velocity) // Used by free/free-snap modes to calculate inertia }) ``` -------------------------------- ### TrackInstance Interface - velocity Method Usage Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/track.md Usage example for the velocity method. ```typescript const v = slider.track.velocity(); console.log('Current velocity:', v); ``` -------------------------------- ### Core API - Constructor Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/quick-reference.md Signature for the KeenSlider constructor. ```typescript new KeenSlider(container, options?, plugins?) ``` -------------------------------- ### Drag Plugin Configuration Options Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/drag-plugin.md Example of configuring the drag plugin with various options. ```typescript const slider = new KeenSlider(container, { drag: true, // Enable/disable dragging dragSpeed: 1, // Speed multiplier (1-2 typical) rubberband: true, // Bounce at boundaries mode: 'snap', // 'snap', 'free', or 'free-snap' }) ``` -------------------------------- ### Custom Hook Callbacks Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/configuration.md Example of adding custom hook callbacks directly in options. ```typescript { // Built-in hooks created: (slider) => { console.log('Created') }, slideChanged: (slider) => { console.log('Slide changed') }, dragStarted: (slider) => { console.log('Drag started') }, // Custom hooks (with TypeScript generics) myCustomHook: (slider) => { console.log('Custom hook') }, } ``` -------------------------------- ### Complete Example Source: https://github.com/rcbyr/keen-slider/blob/master/_autodocs/api-reference/react-native.md A full example demonstrating how to implement an image carousel using Keen Slider in a React Native application. ```typescript import { useKeenSliderNative } from 'keen-slider/react-native' import { View, Image, Text, TouchableOpacity, StyleSheet, } from 'react-native' import { useState, useEffect } from 'react' const images = [ require('./image1.jpg'), require('./image2.jpg'), require('./image3.jpg'), ] export function ImageCarousel() { const [currentSlide, setCurrentSlide] = useState(0) const slider = useKeenSliderNative({ initial: 0, loop: true, mode: 'free-snap', drag: true, rubberband: true, slides: { perView: 1, spacing: 10, }, }) useEffect(() => { slider.on('slideChanged', (instance) => { if (instance.track.details) { setCurrentSlide(instance.track.details.abs) } }) }, []) return (