Advanced Filter System
A flexible and powerful JavaScript library for filtering DOM elements with search, sorting, and range capabilities.
Features
🎯 Flexible Filtering
Support for buttons, checkboxes, radio buttons, dropdowns, and custom filter types with configurable logic modes.
🔍 Real-time Search
Fuzzy search with customizable debouncing, multiple search keys, and instant results.
📊 Range Filters
Interactive sliders for numeric ranges, date ranges, and input ranges with histogram support.
🎨 Smooth Animations
Multiple animation types including fade, slide, scale, flip, and custom transitions.
📱 Responsive Design
Mobile-first design with touch support and adaptive layouts for all screen sizes.
⚙️ Highly Configurable
Extensive customization options for styling, behavior, pagination, and advanced filter logic.
Installation
Via npm
npm install advanced-filter-system
Via yarn
yarn add advanced-filter-system
Via CDN
<script type="module">
import { AFS } from 'https://unpkg.com/advanced-filter-system@latest/dist/afs.modern.js';
</script>
Quick Start
1. HTML Structure
<div class="filter-container">
<!-- Filter Controls -->
<button class="btn-filter" data-filter="*">All</button>
<button class="btn-filter" data-filter="category:tech">Technology</button>
<button class="btn-filter" data-filter="category:design">Design</button>
<!-- Search Input -->
<input type="text" class="filter-search" placeholder="Search...">
<!-- Results Counter -->
<div class="filter-counter"></div>
<!-- Filterable Items -->
<div class="filter-item"
data-categories="category:tech"
data-title="Laptop">
<h3>Premium Laptop</h3>
</div>
<div class="filter-item"
data-categories="category:design"
data-title="Notebook">
<h3>Design Notebook</h3>
</div>
<!-- Pagination -->
<div class="afs-pagination-container"></div>
</div>
2. JavaScript Initialization
import { AFS } from 'advanced-filter-system';
const afs = new AFS({
// Required selectors
containerSelector: '.filter-container',
itemSelector: '.filter-item',
filterButtonSelector: '.btn-filter',
searchInputSelector: '.filter-search',
counterSelector: '.filter-counter',
// Search configuration
searchKeys: ['title', 'categories'],
// Filter logic (NEW!)
filterCategoryMode: 'mixed', // OR within categories, AND between
filterTypeLogic: {
category: { mode: 'OR', multi: true }, // Multi-select OR
brand: 'OR', // Toggle mode
price: 'AND' // Multi-select AND
},
// Pagination
pagination: {
enabled: true,
itemsPerPage: 6
},
// Animations
animation: {
type: 'fade',
duration: 300
}
});
3. Advanced Features
// Add range slider
afs.rangeFilter.addRangeSlider({
key: 'price',
container: '.price-range',
min: 0,
max: 1000,
ui: { showHistogram: true }
});
// Add date range filter
afs.dateFilter.addDateRange({
key: 'date',
container: '.date-range',
minDate: new Date('2024-01-01'),
maxDate: new Date()
});
// Custom sorting
afs.filter.sortWithOrder('price', 'DESC');
// Event listeners
afs.on('filter:applied', (data) => {
console.log(`Filtered: ${data.visible} of ${data.total} items`);
});
Filter Logic Modes
Mixed Mode (Recommended)
OR within categories, AND between categories
filterCategoryMode: 'mixed'
// Select: Tech OR Design
// AND Premium OR Budget
// = Show items that are (Tech OR Design)
// AND (Premium OR Budget)
Per-Type Logic
Configure each filter type independently
filterTypeLogic: {
category: { mode: 'OR', multi: true },
brand: 'OR', // Toggle mode
price: 'AND' // Multi-select AND
}
See It In Action
Try our comprehensive demo with all filter types, animations, and configurations.
Launch Interactive Demo