advanced-filter-system 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -1
- package/dist/AFS.esm.js +184 -4
- package/dist/AFS.esm.js.map +1 -1
- package/dist/AFS.js +184 -4
- package/dist/AFS.js.map +1 -1
- package/dist/AFS.min.js +1 -1
- package/dist/AFS.min.js.map +1 -1
- package/package.json +1 -1
package/dist/AFS.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AFS.esm.js","sources":["../src/AFS.js"],"sourcesContent":["/**\n * @fileoverview Advanced Filter System for DOM elements\n * @version 1.0.5\n *\n * A flexible and customizable filtering system that supports:\n * - Multiple filtering modes (OR/AND)\n * - Text search with debouncing\n * - Multiple sorting criteria\n * - Range filtering\n * - URL state management\n * - Animation and transitions\n * - Results counter\n */\n\n/**\n * Utility function for debouncing\n * @param {Function} func - Function to debounce\n * @param {number} wait - Delay in milliseconds\n * @returns {Function} Debounced function\n */\nfunction debounce(func, wait) {\n let timeout;\n return function executedFunction(...args) {\n const later = () => {\n clearTimeout(timeout);\n func(...args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n };\n}\n\nclass AFS {\n /**\n * @typedef {Object} FilterOptions\n * @property {string} containerSelector - Main container selector\n * @property {string} itemSelector - Items to filter selector\n * @property {string} filterButtonSelector - Filter buttons selector\n * @property {string} [searchInputSelector] - Search input selector\n * @property {string} [counterSelector] - Results counter selector\n * @property {string} [activeClass='active'] - Active state class\n * @property {string} [hiddenClass='hidden'] - Hidden state class\n * @property {number} [animationDuration=300] - Animation duration in ms\n * @property {string} [filterMode='OR'] - Filter mode ('OR' or 'AND')\n * @property {string[]} [searchKeys=['title']] - Data attributes to search in\n * @property {number} [debounceTime=300] - Search debounce delay in ms\n */\n\n /**\n * @param {FilterOptions} options - Filter configuration options\n */\n constructor(options = {}) {\n this.options = {\n containerSelector: \".filter-container\",\n itemSelector: \".filter-item\",\n filterButtonSelector: \".btn-filter\",\n searchInputSelector: \".filter-search\",\n counterSelector: \".filter-counter\",\n activeClass: \"active\",\n hiddenClass: \"hidden\",\n animationDuration: 300,\n filterMode: \"OR\",\n searchKeys: [\"title\"],\n debounceTime: 300,\n ...options,\n };\n\n // Initialize elements\n this.container = document.querySelector(this.options.containerSelector);\n this.items = document.querySelectorAll(this.options.itemSelector);\n this.filterButtons = document.querySelectorAll(\n this.options.filterButtonSelector,\n );\n this.searchInput = document.querySelector(this.options.searchInputSelector);\n this.counter = document.querySelector(this.options.counterSelector);\n\n // Initialize state\n this.currentFilters = new Set([\"*\"]);\n this.currentSearch = \"\";\n this.visibleItems = new Set(this.items);\n this.filterGroups = new Map();\n this.groupMode = \"OR\"; // Default group mode\n\n this.init();\n }\n\n /**\n * Initialize the filter system\n * @private\n */\n init() {\n this.addStyles();\n this.bindEvents();\n this.loadFromURL();\n this.updateCounter();\n }\n\n /**\n * Add required styles to document\n * @private\n */\n addStyles() {\n const styles = `\n .${this.options.hiddenClass} {\n display: none !important;\n }\n\n ${this.options.itemSelector} {\n opacity: 1;\n transform: scale(1);\n transition: opacity ${this.options.animationDuration}ms ease-out,\n transform ${this.options.animationDuration}ms ease-out;\n }\n\n ${this.options.filterButtonSelector} {\n opacity: 0.5;\n transition: opacity ${this.options.animationDuration}ms ease;\n }\n\n ${this.options.filterButtonSelector}.${this.options.activeClass} {\n opacity: 1;\n }\n `;\n\n const styleSheet = document.createElement(\"style\");\n styleSheet.textContent = styles;\n document.head.appendChild(styleSheet);\n }\n\n /**\n * Bind all event listeners\n * @private\n */\n bindEvents() {\n this.filterButtons.forEach((button) => {\n button.addEventListener(\"click\", () => this.handleFilterClick(button));\n });\n\n if (this.searchInput) {\n this.searchInput.addEventListener(\n \"input\",\n debounce((e) => {\n this.search(e.target.value);\n }, this.options.debounceTime),\n );\n }\n\n window.addEventListener(\"popstate\", () => this.loadFromURL());\n }\n\n /**\n * Handle filter button clicks\n * @private\n * @param {HTMLElement} button - Clicked filter button\n */\n handleFilterClick(button) {\n const filterValue = button.dataset.filter;\n\n if (filterValue === \"*\") {\n this.resetFilters();\n } else {\n this.toggleFilter(filterValue, button);\n }\n\n this.filter();\n this.updateURL();\n }\n\n /**\n * Reset all filters to default state\n * @private\n */\n resetFilters() {\n this.filterButtons.forEach((btn) =>\n btn.classList.remove(this.options.activeClass),\n );\n this.currentFilters.clear();\n this.currentFilters.add(\"*\");\n this.filterButtons[0].classList.add(this.options.activeClass);\n this.resetCounter();\n }\n\n /**\n * Reset visible items counter\n * @private\n */\n resetCounter() {\n this.visibleItems = new Set(this.items);\n this.updateCounter();\n }\n\n /**\n * Toggle individual filter state\n * @private\n * @param {string} filterValue - Filter value to toggle\n * @param {HTMLElement} button - Filter button element\n */\n toggleFilter(filterValue, button) {\n this.currentFilters.delete(\"*\");\n this.filterButtons[0].classList.remove(this.options.activeClass);\n\n if (button.classList.contains(this.options.activeClass)) {\n button.classList.remove(this.options.activeClass);\n this.currentFilters.delete(filterValue);\n\n // If no filters are selected, reset to default state and clear URL\n if (this.currentFilters.size === 0) {\n this.resetFilters();\n window.history.pushState({}, \"\", window.location.pathname);\n return;\n }\n } else {\n button.classList.add(this.options.activeClass);\n this.currentFilters.add(filterValue);\n }\n }\n\n /**\n * Apply current filters to items\n * @public\n */\n /**\n * Apply current filters to items\n * @public\n */\n filter() {\n // Store the original filter logic\n const standardFilter = () => {\n this.visibleItems.clear();\n\n this.items.forEach((item) => {\n if (this.currentFilters.has(\"*\")) {\n this.showItem(item);\n this.visibleItems.add(item);\n } else {\n const itemCategories = new Set(\n item.dataset.categories?.split(\" \") || [],\n );\n const matchesFilter =\n this.options.filterMode === \"OR\"\n ? this.matchesAnyFilter(itemCategories)\n : this.matchesAllFilters(itemCategories);\n\n if (matchesFilter) {\n this.showItem(item);\n this.visibleItems.add(item);\n } else {\n this.hideItem(item);\n }\n }\n });\n };\n\n // Check if we should use group filtering or standard filtering\n if (this.filterGroups.size === 0) {\n standardFilter();\n } else {\n this.visibleItems.clear();\n\n this.items.forEach((item) => {\n if (this.currentFilters.has(\"*\")) {\n this.showItem(item);\n this.visibleItems.add(item);\n } else {\n const itemCategories = new Set(\n item.dataset.categories?.split(\" \") || [],\n );\n const matchesGroups = this.matchesFilterGroups(itemCategories);\n\n if (matchesGroups) {\n this.showItem(item);\n this.visibleItems.add(item);\n } else {\n this.hideItem(item);\n }\n }\n });\n }\n\n setTimeout(() => {\n this.updateCounter();\n }, this.options.animationDuration);\n }\n\n /**\n * Add or update a filter group\n * @public\n * @param {string} groupId - Group identifier\n * @param {string[]} filters - Array of filter values\n * @param {string} [operator='OR'] - Operator within group ('AND' or 'OR')\n * @returns {boolean} Success status\n */\n addFilterGroup(groupId, filters, operator = \"OR\") {\n try {\n // Validate inputs\n if (!groupId || !Array.isArray(filters)) {\n console.warn(\"Invalid group parameters\");\n return false;\n }\n\n const validOperator = operator.toUpperCase();\n if (![\"AND\", \"OR\"].includes(validOperator)) {\n console.warn('Invalid operator. Using default \"OR\"');\n operator = \"OR\";\n }\n\n // Create or update group\n this.filterGroups.set(groupId, {\n filters: new Set(filters),\n operator: validOperator,\n });\n\n // Only update if we have active groups\n if (this.filterGroups.size > 0) {\n this.updateFiltersFromGroups();\n this.filter();\n this.updateURL();\n }\n\n return true;\n } catch (error) {\n console.error(\"Error adding filter group:\", error);\n return false;\n }\n }\n\n /**\n * Set how groups combine with each other\n * @public\n * @param {string} mode - Mode for combining groups ('AND' or 'OR')\n */\n setGroupMode(mode) {\n const validMode = mode.toUpperCase();\n if ([\"AND\", \"OR\"].includes(validMode)) {\n this.groupMode = validMode;\n if (this.filterGroups.size > 0) {\n this.filter();\n }\n }\n }\n\n /**\n * Remove a filter group\n * @public\n * @param {string} groupId - Group identifier\n * @returns {boolean} Success status\n */\n removeFilterGroup(groupId) {\n if (this.filterGroups.has(groupId)) {\n this.filterGroups.delete(groupId);\n\n // If no groups left, revert to normal filtering\n if (this.filterGroups.size === 0) {\n this.resetFilters();\n } else {\n this.updateFiltersFromGroups();\n }\n\n this.filter();\n this.updateURL();\n return true;\n }\n return false;\n }\n\n /**\n * Update filters based on groups\n * @private\n */\n updateFiltersFromGroups() {\n // Only process if we have groups\n if (this.filterGroups.size === 0) return;\n\n // Clear current filters except '*'\n if (!this.currentFilters.has(\"*\")) {\n this.currentFilters.clear();\n }\n\n // Combine all group filters\n for (const group of this.filterGroups.values()) {\n group.filters.forEach((filter) => {\n if (filter !== \"*\") {\n this.currentFilters.add(filter);\n }\n });\n }\n }\n\n /**\n * Check if item matches any active filter (OR mode)\n * @private\n * @param {Set} itemCategories - Item's categories\n * @returns {boolean} Whether item matches any filter\n */\n matchesAnyFilter(itemCategories) {\n return [...this.currentFilters].some((filter) => {\n const [type, value] = filter.split(\":\");\n return itemCategories.has(`${type}:${value}`);\n });\n }\n\n /**\n * Check if item matches all active filters (AND mode)\n * @private\n * @param {Set} itemCategories - Item's categories\n * @returns {boolean} Whether item matches all filters\n */\n matchesAllFilters(itemCategories) {\n return [...this.currentFilters].every((filter) => {\n const [type, value] = filter.split(\":\");\n return itemCategories.has(`${type}:${value}`);\n });\n }\n\n /**\n * Show an item with animation\n * @private\n * @param {HTMLElement} item - Item to show\n */\n showItem(item) {\n this.visibleItems.add(item);\n item.classList.remove(this.options.hiddenClass);\n item.style.opacity = \"0\";\n item.style.transform = \"scale(0.95)\";\n\n item.offsetHeight;\n\n requestAnimationFrame(() => {\n item.style.opacity = \"1\";\n item.style.transform = \"scale(1)\";\n });\n }\n\n /**\n * Hide an item with animation\n * @private\n * @param {HTMLElement} item - Item to hide\n */\n hideItem(item) {\n item.style.opacity = \"0\";\n item.style.transform = \"scale(0.95)\";\n\n setTimeout(() => {\n if (item.style.opacity === \"0\") {\n item.classList.add(this.options.hiddenClass);\n this.visibleItems.delete(item);\n }\n }, this.options.animationDuration);\n }\n\n /**\n * Search items by text\n * @public\n * @param {string} query - Search query\n */\n search(query) {\n this.currentSearch = query.toLowerCase().trim();\n let matches = 0;\n\n this.items.forEach((item) => {\n const searchText = this.options.searchKeys\n .map((key) => item.dataset[key] || \"\")\n .join(\" \")\n .toLowerCase();\n\n const matchesSearch =\n this.currentSearch === \"\" || searchText.includes(this.currentSearch);\n\n if (matchesSearch) {\n this.showItem(item);\n matches++;\n } else {\n this.hideItem(item);\n }\n });\n\n this.updateURL();\n\n setTimeout(() => {\n this.updateCounter();\n }, this.options.animationDuration);\n }\n\n /**\n * Sort items by multiple criteria\n * @public\n * @param {Array<{key: string, direction: string}>} criteria - Sort criteria\n */\n sortMultiple(criteria) {\n const items = [...this.items];\n\n items.sort((a, b) => {\n for (const criterion of criteria) {\n const valueA = a.dataset[criterion.key];\n const valueB = b.dataset[criterion.key];\n\n const comparison =\n criterion.direction === \"asc\"\n ? valueA.localeCompare(valueB)\n : valueB.localeCompare(valueA);\n\n if (comparison !== 0) return comparison;\n }\n return 0;\n });\n\n items.forEach((item) => this.container.appendChild(item));\n }\n\n /**\n * Filter items by numeric range\n * @public\n * @param {string} key - Data attribute key\n * @param {number} min - Minimum value\n * @param {number} max - Maximum value\n */\n addRangeFilter(key, min, max) {\n this.items.forEach((item) => {\n const value = parseFloat(item.dataset[key]);\n const inRange = value >= min && value <= max;\n\n if (inRange) {\n this.showItem(item);\n } else {\n this.hideItem(item);\n }\n });\n\n setTimeout(() => {\n this.updateCounter();\n }, this.options.animationDuration);\n }\n\n /**\n * Check if item matches filter groups\n * @private\n * @param {Set} itemCategories - Item's categories\n * @returns {boolean} Whether item matches the group filters\n */\n matchesFilterGroups(itemCategories) {\n const groupMatches = [...this.filterGroups.values()].map((group) => {\n const groupFilters = [...group.filters];\n if (groupFilters.length === 0) return true;\n\n return group.operator === \"OR\"\n ? groupFilters.some((filter) => itemCategories.has(filter))\n : groupFilters.every((filter) => itemCategories.has(filter));\n });\n\n return this.groupMode === \"OR\"\n ? groupMatches.some((matches) => matches)\n : groupMatches.every((matches) => matches);\n }\n\n /**\n * Update URL with current filter state\n * @private\n */\n updateURL() {\n // If only \"*\" filter is active or no filters are active, clear the URL\n if (\n this.currentFilters.size === 0 ||\n (this.currentFilters.size === 1 && this.currentFilters.has(\"*\"))\n ) {\n window.history.pushState({}, \"\", window.location.pathname);\n return;\n }\n\n const params = new URLSearchParams(window.location.search);\n\n // Add groups to URL if they exist\n if (this.filterGroups.size > 0) {\n for (const [groupId, group] of this.filterGroups.entries()) {\n params.set(`group_${groupId}`, [...group.filters].join(\",\"));\n params.set(`groupOp_${groupId}`, group.operator.toLowerCase());\n }\n params.set(\"groupMode\", this.groupMode.toLowerCase());\n }\n\n // Separate filters by type\n const filtersByType = {};\n for (const filter of this.currentFilters) {\n if (filter !== \"*\") {\n const [type, value] = filter.split(\":\");\n if (!filtersByType[type]) {\n filtersByType[type] = new Set();\n }\n filtersByType[type].add(value);\n }\n }\n\n // Add each filter type to the URL\n Object.entries(filtersByType).forEach(([type, values]) => {\n params.set(type, Array.from(values).join(\",\"));\n });\n\n if (this.currentSearch) {\n params.set(\"search\", this.currentSearch);\n }\n\n const newURL = `${window.location.pathname}${\n params.toString() ? \"?\" + params.toString() : \"\"\n }`;\n window.history.pushState({}, \"\", newURL);\n }\n\n /**\n * Load filter state from URL\n * @private\n */\n loadFromURL() {\n const params = new URLSearchParams(window.location.search);\n\n // Load groups if they exist\n this.filterGroups.clear();\n for (const [key, value] of params.entries()) {\n if (key.startsWith(\"group_\")) {\n const groupId = key.replace(\"group_\", \"\");\n const operator =\n params.get(`groupOp_${groupId}`)?.toUpperCase() || \"OR\";\n const filters = value.split(\",\");\n this.addFilterGroup(groupId, filters, operator);\n }\n }\n\n // Set group mode if present\n const groupMode = params.get(\"groupMode\")?.toUpperCase();\n if (groupMode && [\"AND\", \"OR\"].includes(groupMode)) {\n this.groupMode = groupMode;\n }\n\n this.currentFilters.clear();\n\n // Si aucun filtre n'est présent, utiliser '*'\n let hasFilters = false;\n\n // Parcourir tous les paramètres\n for (const [type, values] of params.entries()) {\n if (type !== \"search\") {\n hasFilters = true;\n values.split(\",\").forEach((value) => {\n this.currentFilters.add(`${type}:${value}`);\n });\n }\n }\n\n if (!hasFilters) {\n this.currentFilters.add(\"*\");\n }\n\n // Update active buttons\n this.filterButtons.forEach((button) => {\n const filterValue = button.dataset.filter;\n if (\n this.currentFilters.has(filterValue) ||\n (filterValue === \"*\" && this.currentFilters.has(\"*\"))\n ) {\n button.classList.add(this.options.activeClass);\n } else {\n button.classList.remove(this.options.activeClass);\n }\n });\n\n // Load search\n const search = params.get(\"search\") || \"\";\n if (this.searchInput) {\n this.searchInput.value = search;\n }\n\n this.filter();\n if (search) {\n this.search(search);\n }\n }\n\n /**\n * Update results counter\n * @private\n * @returns {{total: number, visible: number}}\n */\n updateCounter() {\n const total = this.items.length;\n const visible = this.visibleItems.size;\n\n if (this.counter) {\n this.counter.textContent = `Showing ${visible} of ${total}`;\n }\n\n return { total, visible };\n }\n\n /**\n * Set animation options\n * @public\n * @param {Object} options - Animation options\n */\n setAnimationOptions(options = {}) {\n this.options.animationDuration =\n options.duration || this.options.animationDuration;\n this.options.animationType = options.type || \"ease-out\";\n this.addStyles(); // Refresh styles with new options\n }\n\n /**\n * Event handling system\n */\n addEventSystem() {\n this.events = {};\n\n this.on = (eventName, callback) => {\n if (!this.events[eventName]) {\n this.events[eventName] = [];\n }\n this.events[eventName].push(callback);\n };\n\n this.emit = (eventName, data) => {\n if (this.events[eventName]) {\n this.events[eventName].forEach((callback) => callback(data));\n }\n };\n }\n\n /**\n * Add pagination\n * @public\n * @param {number} itemsPerPage - Number of items per page\n */\n setPagination(itemsPerPage) {\n this.pagination = {\n currentPage: 1,\n itemsPerPage: itemsPerPage,\n totalPages: Math.ceil(this.visibleItems.size / itemsPerPage),\n };\n this.updatePagination();\n }\n\n updatePagination() {\n const start =\n (this.pagination.currentPage - 1) * this.pagination.itemsPerPage;\n const end = start + this.pagination.itemsPerPage;\n\n [...this.visibleItems].forEach((item, index) => {\n if (index >= start && index < end) {\n this.showItem(item);\n } else {\n this.hideItem(item);\n }\n });\n }\n\n /**\n * Enable analytics tracking\n * @public\n * @param {Function} callback - Analytics callback function\n */\n enableAnalytics(callback) {\n this.analyticsCallback = callback;\n this.on(\"filter\", (data) => {\n this.analyticsCallback({\n type: \"filter\",\n filters: [...this.currentFilters],\n visibleItems: this.visibleItems.size,\n timestamp: new Date().toISOString(),\n });\n });\n }\n\n /**\n * Sort with custom comparator\n * @public\n * @param {string} key - Data attribute key\n * @param {Function} comparator - Custom comparison function\n */\n sortWithComparator(key, comparator) {\n const items = [...this.items];\n items.sort((a, b) => {\n const valueA = a.dataset[key];\n const valueB = b.dataset[key];\n return comparator(valueA, valueB);\n });\n items.forEach((item) => this.container.appendChild(item));\n }\n\n /**\n * Add responsive behavior\n * @public\n * @param {Object} breakpoints - Breakpoint configurations\n */\n setResponsiveOptions(breakpoints) {\n window.addEventListener(\n \"resize\",\n debounce(() => {\n const width = window.innerWidth;\n for (const [breakpoint, options] of Object.entries(breakpoints)) {\n if (width <= parseInt(breakpoint)) {\n Object.assign(this.options, options);\n this.filter();\n break;\n }\n }\n }, 250),\n );\n }\n\n /**\n * Enable keyboard navigation\n * @public\n */\n enableKeyboardNavigation() {\n document.addEventListener(\"keydown\", (e) => {\n if (\n e.key === \"Enter\" &&\n document.activeElement.classList.contains(\n this.options.filterButtonSelector.slice(1),\n )\n ) {\n document.activeElement.click();\n }\n });\n }\n\n /**\n * Export current filter state\n * @public\n * @returns {Object} Filter state\n */\n exportState() {\n return {\n filters: [...this.currentFilters],\n search: this.currentSearch,\n mode: this.options.filterMode,\n timestamp: new Date().toISOString(),\n };\n }\n\n /**\n * Import filter state\n * @public\n * @param {Object} state - Filter state to import\n */\n importState(state) {\n if (state.filters) {\n this.currentFilters = new Set(state.filters);\n this.currentSearch = state.search || \"\";\n this.options.filterMode = state.mode || \"OR\";\n this.filter();\n this.updateURL();\n }\n }\n\n /**\n * Save current filter state as preset\n * @public\n * @param {string} presetName - Name of the preset\n */\n savePreset(presetName) {\n const preset = {\n filters: [...this.currentFilters],\n search: this.currentSearch,\n mode: this.options.filterMode,\n };\n localStorage.setItem(`afs_preset_${presetName}`, JSON.stringify(preset));\n }\n\n /**\n * Load filter preset\n * @public\n * @param {string} presetName - Name of the preset to load\n */\n loadPreset(presetName) {\n const preset = JSON.parse(localStorage.getItem(`afs_preset_${presetName}`));\n if (preset) {\n this.currentFilters = new Set(preset.filters);\n this.currentSearch = preset.search;\n this.options.filterMode = preset.mode;\n this.filter();\n this.updateURL();\n }\n }\n\n /**\n * Set filter logic mode (alias for setFilterMode)\n * @public\n * @param {string} logic - New filter logic ('AND' or 'OR')\n */\n setLogic(logic) {\n if (typeof logic === \"boolean\") {\n // Handle boolean input (true = AND, false = OR)\n this.options.filterMode = logic ? \"AND\" : \"OR\";\n this.filter();\n return;\n }\n\n const mode = logic.toUpperCase();\n if ([\"OR\", \"AND\"].includes(mode)) {\n this.options.filterMode = mode;\n this.filter();\n }\n }\n\n /**\n * Change filter mode\n * @public\n * @param {string} mode - New filter mode ('OR' or 'AND')\n */\n setFilterMode(mode) {\n if ([\"OR\", \"AND\"].includes(mode.toUpperCase())) {\n this.options.filterMode = mode.toUpperCase();\n this.filter();\n }\n }\n\n /**\n * Add filter by type and value\n * @public\n * @param {string} type - Filter type\n * @param {string} value - Filter value\n */\n addFilter(type, value) {\n this.currentFilters.add(`${type}:${value}`);\n this.filter();\n this.updateURL();\n }\n\n /**\n * Remove filter by type and value\n * @public\n * @param {string} type - Filter type\n */\n removeFilter(type, value) {\n this.currentFilters.delete(`${type}:${value}`);\n if (this.currentFilters.size === 0) {\n this.currentFilters.add(\"*\");\n }\n this.filter();\n this.updateURL();\n }\n\n /**\n * Get active filters by type\n * @public\n * @param {string} type - Filter type\n */\n getActiveFiltersByType(type) {\n return [...this.currentFilters]\n .filter((filter) => filter.startsWith(`${type}:`))\n .map((filter) => filter.split(\":\")[1]);\n }\n}\n\nexport { AFS };\n"],"names":["debounce","func","wait","timeout","executedFunction","_len","arguments","length","args","Array","_key","later","clearTimeout","setTimeout","AFS","constructor","options","undefined","containerSelector","itemSelector","filterButtonSelector","searchInputSelector","counterSelector","activeClass","hiddenClass","animationDuration","filterMode","searchKeys","debounceTime","container","document","querySelector","items","querySelectorAll","filterButtons","searchInput","counter","currentFilters","Set","currentSearch","visibleItems","filterGroups","Map","groupMode","init","addStyles","bindEvents","loadFromURL","updateCounter","styles","styleSheet","createElement","textContent","head","appendChild","forEach","button","addEventListener","handleFilterClick","e","search","target","value","window","filterValue","dataset","filter","resetFilters","toggleFilter","updateURL","btn","classList","remove","clear","add","resetCounter","delete","contains","size","history","pushState","location","pathname","standardFilter","item","has","showItem","itemCategories","categories","split","matchesFilter","matchesAnyFilter","matchesAllFilters","hideItem","matchesGroups","matchesFilterGroups","addFilterGroup","groupId","filters","operator","isArray","console","warn","validOperator","toUpperCase","includes","set","updateFiltersFromGroups","error","setGroupMode","mode","validMode","removeFilterGroup","group","values","some","type","every","style","opacity","transform","offsetHeight","requestAnimationFrame","query","toLowerCase","trim","searchText","map","key","join","matchesSearch","sortMultiple","criteria","sort","a","b","criterion","valueA","valueB","comparison","direction","localeCompare","addRangeFilter","min","max","parseFloat","inRange","groupMatches","groupFilters","matches","params","URLSearchParams","entries","filtersByType","Object","_ref","from","newURL","toString","startsWith","replace","get","hasFilters","total","visible","setAnimationOptions","duration","animationType","addEventSystem","events","on","eventName","callback","push","emit","data","setPagination","itemsPerPage","pagination","currentPage","totalPages","Math","ceil","updatePagination","start","end","index","enableAnalytics","analyticsCallback","timestamp","Date","toISOString","sortWithComparator","comparator","setResponsiveOptions","breakpoints","width","innerWidth","breakpoint","parseInt","assign","enableKeyboardNavigation","activeElement","slice","click","exportState","importState","state","savePreset","presetName","preset","localStorage","setItem","JSON","stringify","loadPreset","parse","getItem","setLogic","logic","setFilterMode","addFilter","removeFilter","getActiveFiltersByType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AFS.esm.js","sources":["../src/AFS.js"],"sourcesContent":["/**\n * @fileoverview Advanced Filter System for DOM elements\n * @version 1.0.6\n *\n * A flexible and customizable filtering system that supports:\n * - Multiple filtering modes (OR/AND)\n * - Text search with debouncing\n * - Multiple sorting criteria\n * - Range filtering\n * - URL state management\n * - Animation and transitions\n * - Results counter\n */\n\n/**\n * Utility function for debouncing\n * @param {Function} func - Function to debounce\n * @param {number} wait - Delay in milliseconds\n * @returns {Function} Debounced function\n */\nfunction debounce(func, wait) {\n let timeout;\n return function executedFunction(...args) {\n const later = () => {\n clearTimeout(timeout);\n func(...args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n };\n}\n\nclass AFS {\n /**\n * @typedef {Object} FilterOptions\n * @property {string} containerSelector - Main container selector\n * @property {string} itemSelector - Items to filter selector\n * @property {string} filterButtonSelector - Filter buttons selector\n * @property {string} [searchInputSelector] - Search input selector\n * @property {string} [counterSelector] - Results counter selector\n * @property {string} [activeClass='active'] - Active state class\n * @property {string} [hiddenClass='hidden'] - Hidden state class\n * @property {number} [animationDuration=300] - Animation duration in ms\n * @property {string} [filterMode='OR'] - Filter mode ('OR' or 'AND')\n * @property {string[]} [searchKeys=['title']] - Data attributes to search in\n * @property {number} [debounceTime=300] - Search debounce delay in ms\n */\n\n /**\n * @param {FilterOptions} options - Filter configuration options\n */\n constructor(options = {}) {\n this.options = {\n containerSelector: \".filter-container\",\n itemSelector: \".filter-item\",\n filterButtonSelector: \".btn-filter\",\n searchInputSelector: \".filter-search\",\n counterSelector: \".filter-counter\",\n activeClass: \"active\",\n hiddenClass: \"hidden\",\n animationDuration: 300,\n filterMode: \"OR\",\n searchKeys: [\"title\"],\n debounceTime: 300,\n debug: false,\n logLevel: 'info',\n ...options,\n };\n\n // Define logging levels hierarchy\n this.logLevels = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3\n };\n\n // Initialize elements\n this.container = document.querySelector(this.options.containerSelector);\n this.items = document.querySelectorAll(this.options.itemSelector);\n this.sortOrders = {};\n this.filterButtons = document.querySelectorAll(\n this.options.filterButtonSelector,\n );\n this.searchInput = document.querySelector(this.options.searchInputSelector);\n this.counter = document.querySelector(this.options.counterSelector);\n\n // Initialize state\n this.currentFilters = new Set([\"*\"]);\n this.currentSearch = \"\";\n this.visibleItems = new Set(this.items);\n this.filterGroups = new Map();\n this.groupMode = \"OR\"; // Default group mode\n\n this.log('debug', 'Initializing AFS with options:', this.options);\n this.init();\n }\n\n /**\n * Internal logging method\n * Handles debug message output based on current log level\n * \n * @private\n * @param {string} level - Log level ('error', 'warn', 'info', 'debug')\n * @param {...any} args - Arguments to log\n */\n log(level, ...args) {\n if (!this.options.debug) return;\n \n const currentLevelValue = this.logLevels[this.options.logLevel];\n const messageLevel = this.logLevels[level];\n\n if (messageLevel <= currentLevelValue) {\n const timestamp = new Date().toISOString();\n const prefix = `[AFS ${level.toUpperCase()}] ${timestamp}`;\n\n switch (level) {\n case 'error':\n console.error(prefix, ...args);\n break;\n case 'warn':\n console.warn(prefix, ...args);\n break;\n case 'info':\n console.info(prefix, ...args);\n break;\n case 'debug':\n console.debug(prefix, ...args);\n break;\n }\n }\n }\n\n /**\n * Configure debug mode settings\n * \n * @public\n * @param {boolean} enabled - Enable or disable debug mode\n * @param {string} [level='info'] - Log level ('error', 'warn', 'info', 'debug')\n */\n setDebugMode(enabled, level = 'info') {\n this.options.debug = enabled;\n if (this.logLevels.hasOwnProperty(level)) {\n this.options.logLevel = level;\n }\n this.log('info', `Debug mode ${enabled ? 'enabled' : 'disabled'} with level: ${level}`);\n }\n\n /**\n * Initialize the filter system\n * Sets up styles, events, and initial state\n * \n * @private\n */\n init() {\n this.log('debug', 'Starting initialization');\n \n if (!this.container) {\n this.log('error', `Container not found: ${this.options.containerSelector}`);\n return;\n }\n\n this.addStyles();\n this.bindEvents();\n this.loadFromURL();\n this.updateCounter();\n \n this.log('info', 'Initialization complete');\n }\n\n /**\n * Add required styles to document\n * @private\n */\n addStyles() {\n const styles = `\n .${this.options.hiddenClass} {\n display: none !important;\n }\n\n ${this.options.itemSelector} {\n opacity: 1;\n transform: scale(1);\n transition: opacity ${this.options.animationDuration}ms ease-out,\n transform ${this.options.animationDuration}ms ease-out;\n }\n\n ${this.options.filterButtonSelector} {\n opacity: 0.5;\n transition: opacity ${this.options.animationDuration}ms ease;\n }\n\n ${this.options.filterButtonSelector}.${this.options.activeClass} {\n opacity: 1;\n }\n `;\n\n const styleSheet = document.createElement(\"style\");\n styleSheet.textContent = styles;\n document.head.appendChild(styleSheet);\n this.log('debug', 'Styles added to document');\n }\n\n /**\n * Bind all event listeners\n * @private\n */\n bindEvents() {\n this.log('debug', 'Binding events');\n\n this.filterButtons.forEach((button) => {\n button.addEventListener(\"click\", () => this.handleFilterClick(button));\n });\n\n if (this.searchInput) {\n this.searchInput.addEventListener(\n \"input\",\n debounce((e) => {\n this.search(e.target.value);\n }, this.options.debounceTime),\n );\n }\n\n window.addEventListener(\"popstate\", () => this.loadFromURL());\n\n this.log('debug', 'Events bound successfully');\n }\n\n /**\n * Handle filter button clicks\n * @private\n * @param {HTMLElement} button - Clicked filter button\n */\n handleFilterClick(button) {\n const filterValue = button.dataset.filter;\n this.log('debug', 'Filter button clicked:', filterValue);\n\n if (filterValue === \"*\") {\n this.resetFilters();\n } else {\n this.toggleFilter(filterValue, button);\n }\n\n this.filter();\n this.updateURL();\n }\n\n /**\n * Reset all filters to default state\n * @private\n */\n resetFilters() {\n this.log('debug', 'Resetting filters');\n\n this.filterButtons.forEach((btn) =>\n btn.classList.remove(this.options.activeClass),\n );\n this.currentFilters.clear();\n this.currentFilters.add(\"*\");\n this.filterButtons[0].classList.add(this.options.activeClass);\n this.resetCounter();\n }\n\n /**\n * Reset visible items counter\n * @private\n */\n resetCounter() {\n this.visibleItems = new Set(this.items);\n this.updateCounter();\n }\n\n /**\n * Toggle individual filter state\n * @private\n * @param {string} filterValue - Filter value to toggle\n * @param {HTMLElement} button - Filter button element\n */\n toggleFilter(filterValue, button) {\n this.log('debug', `Toggling filter: ${filterValue}`);\n\n this.currentFilters.delete(\"*\");\n this.filterButtons[0].classList.remove(this.options.activeClass);\n\n if (button.classList.contains(this.options.activeClass)) {\n button.classList.remove(this.options.activeClass);\n this.currentFilters.delete(filterValue);\n\n // If no filters are selected, reset to default state and clear URL\n if (this.currentFilters.size === 0) {\n this.resetFilters();\n window.history.pushState({}, \"\", window.location.pathname);\n return;\n }\n } else {\n button.classList.add(this.options.activeClass);\n this.currentFilters.add(filterValue);\n }\n }\n\n /**\n * Sort items based on auto-detecting ASC or DESC for each key\n * @public\n * @param {string} key - The data attribute key to sort by (e.g., 'title', 'price', 'date')\n */\n sortWithOrder(key) {\n const items = [...this.items];\n\n // Check if the current sort order is ASC, default to ASC if undefined\n const currentOrder = this.sortOrders[key] || \"asc\";\n const newOrder = currentOrder === \"asc\" ? \"desc\" : \"asc\"; // Toggle order\n\n // Sort items based on the new order\n items.sort((a, b) => {\n let valueA = a.dataset[key];\n let valueB = b.dataset[key];\n\n // Check if values are numeric and convert them to numbers if they are\n const isNumeric = !isNaN(valueA) && !isNaN(valueB);\n if (isNumeric) {\n valueA = parseFloat(valueA);\n valueB = parseFloat(valueB);\n }\n\n if (newOrder === \"asc\") {\n return isNumeric ? valueA - valueB : valueA.localeCompare(valueB);\n } else {\n return isNumeric ? valueB - valueA : valueB.localeCompare(valueA);\n }\n });\n\n // Update the current sort order for the key\n this.sortOrders[key] = newOrder;\n\n // Reorder items in the DOM\n items.forEach((item) => this.container.appendChild(item));\n\n this.log('debug', `Sorting items by ${key} in ${newOrder} order`);\n }\n\n /**\n * Shuffle items randomly and display in the container\n * @public\n */\n shuffle() {\n const itemsArray = [...this.items];\n\n // Shuffle the itemsArray using Fisher-Yates algorithm\n for (let i = itemsArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [itemsArray[i], itemsArray[j]] = [itemsArray[j], itemsArray[i]];\n }\n\n // Re-append the shuffled items to the container\n itemsArray.forEach((item) => this.container.appendChild(item));\n\n this.log('debug', 'Shuffling items');\n }\n\n /**\n * Apply current filters to items\n * @public\n */\n /**\n * Apply current filters to items\n * @public\n */\n filter() {\n // Store the original filter logic\n const standardFilter = () => {\n this.log('debug', 'Applying filters');\n\n this.visibleItems.clear();\n\n this.items.forEach((item) => {\n if (this.currentFilters.has(\"*\")) {\n this.showItem(item);\n this.visibleItems.add(item);\n } else {\n const itemCategories = new Set(\n item.dataset.categories?.split(\" \") || [],\n );\n const matchesFilter =\n this.options.filterMode === \"OR\"\n ? this.matchesAnyFilter(itemCategories)\n : this.matchesAllFilters(itemCategories);\n\n if (matchesFilter) {\n this.showItem(item);\n this.visibleItems.add(item);\n } else {\n this.hideItem(item);\n }\n }\n });\n };\n\n // Check if we should use group filtering or standard filtering\n if (this.filterGroups.size === 0) {\n standardFilter();\n } else {\n this.visibleItems.clear();\n\n this.items.forEach((item) => {\n if (this.currentFilters.has(\"*\")) {\n this.showItem(item);\n this.visibleItems.add(item);\n } else {\n const itemCategories = new Set(\n item.dataset.categories?.split(\" \") || [],\n );\n const matchesGroups = this.matchesFilterGroups(itemCategories);\n\n if (matchesGroups) {\n this.showItem(item);\n this.visibleItems.add(item);\n } else {\n this.hideItem(item);\n }\n }\n });\n }\n\n setTimeout(() => {\n this.updateCounter();\n }, this.options.animationDuration);\n\n this.log('info', `Filter applied. Visible items: ${this.visibleItems.size}`);\n }\n\n /**\n * Add or update a filter group\n * @public\n * @param {string} groupId - Group identifier\n * @param {string[]} filters - Array of filter values\n * @param {string} [operator='OR'] - Operator within group ('AND' or 'OR')\n * @returns {boolean} Success status\n */\n addFilterGroup(groupId, filters, operator = \"OR\") {\n try {\n // Validate inputs\n if (!groupId || !Array.isArray(filters)) {\n this.log('error', 'Invalid group ID or filters');\n return false;\n }\n\n const validOperator = operator.toUpperCase();\n if (![\"AND\", \"OR\"].includes(validOperator)) {\n this.log('error', 'Invalid operator:', operator);\n operator = \"OR\";\n }\n\n // Create or update group\n this.filterGroups.set(groupId, {\n filters: new Set(filters),\n operator: validOperator,\n });\n\n // Only update if we have active groups\n if (this.filterGroups.size > 0) {\n this.updateFiltersFromGroups();\n this.filter();\n this.updateURL();\n }\n\n return true;\n } catch (error) {\n this.log('error', 'Error adding filter group:', error);\n return false;\n }\n }\n\n /**\n * Set how groups combine with each other\n * @public\n * @param {string} mode - Mode for combining groups ('AND' or 'OR')\n */\n setGroupMode(mode) {\n const validMode = mode.toUpperCase();\n if ([\"AND\", \"OR\"].includes(validMode)) {\n this.groupMode = validMode;\n if (this.filterGroups.size > 0) {\n this.filter();\n }\n }\n }\n\n /**\n * Remove a filter group\n * @public\n * @param {string} groupId - Group identifier\n * @returns {boolean} Success status\n */\n removeFilterGroup(groupId) {\n if (this.filterGroups.has(groupId)) {\n this.filterGroups.delete(groupId);\n\n // If no groups left, revert to normal filtering\n if (this.filterGroups.size === 0) {\n this.resetFilters();\n } else {\n this.updateFiltersFromGroups();\n }\n\n this.filter();\n this.updateURL();\n return true;\n }\n return false;\n }\n\n /**\n * Update filters based on groups\n * @private\n */\n updateFiltersFromGroups() {\n // Only process if we have groups\n if (this.filterGroups.size === 0) return;\n\n // Clear current filters except '*'\n if (!this.currentFilters.has(\"*\")) {\n this.currentFilters.clear();\n }\n\n // Combine all group filters\n for (const group of this.filterGroups.values()) {\n group.filters.forEach((filter) => {\n if (filter !== \"*\") {\n this.currentFilters.add(filter);\n }\n });\n }\n }\n\n /**\n * Check if item matches any active filter (OR mode)\n * @private\n * @param {Set} itemCategories - Item's categories\n * @returns {boolean} Whether item matches any filter\n */\n matchesAnyFilter(itemCategories) {\n return [...this.currentFilters].some((filter) => {\n const [type, value] = filter.split(\":\");\n return itemCategories.has(`${type}:${value}`);\n });\n }\n\n /**\n * Check if item matches all active filters (AND mode)\n * @private\n * @param {Set} itemCategories - Item's categories\n * @returns {boolean} Whether item matches all filters\n */\n matchesAllFilters(itemCategories) {\n return [...this.currentFilters].every((filter) => {\n const [type, value] = filter.split(\":\");\n return itemCategories.has(`${type}:${value}`);\n });\n }\n\n /**\n * Show an item with animation\n * @private\n * @param {HTMLElement} item - Item to show\n */\n showItem(item) {\n this.visibleItems.add(item);\n item.classList.remove(this.options.hiddenClass);\n item.style.opacity = \"0\";\n item.style.transform = \"scale(0.95)\";\n\n item.offsetHeight;\n\n requestAnimationFrame(() => {\n item.style.opacity = \"1\";\n item.style.transform = \"scale(1)\";\n });\n }\n\n /**\n * Hide an item with animation\n * @private\n * @param {HTMLElement} item - Item to hide\n */\n hideItem(item) {\n item.style.opacity = \"0\";\n item.style.transform = \"scale(0.95)\";\n\n setTimeout(() => {\n if (item.style.opacity === \"0\") {\n item.classList.add(this.options.hiddenClass);\n this.visibleItems.delete(item);\n }\n }, this.options.animationDuration);\n }\n\n /**\n * Search items by text\n * @public\n * @param {string} query - Search query\n */\n search(query) {\n this.log('debug', 'Performing search with query:', query);\n\n this.currentSearch = query.toLowerCase().trim();\n let matches = 0;\n\n this.items.forEach((item) => {\n const searchText = this.options.searchKeys\n .map((key) => item.dataset[key] || \"\")\n .join(\" \")\n .toLowerCase();\n\n const matchesSearch =\n this.currentSearch === \"\" || searchText.includes(this.currentSearch);\n\n if (matchesSearch) {\n this.showItem(item);\n matches++;\n } else {\n this.hideItem(item);\n }\n });\n\n this.updateURL();\n this.log('info', `Search complete. Found ${matches} matches`);\n\n setTimeout(() => {\n this.updateCounter();\n }, this.options.animationDuration);\n }\n\n /**\n * Sort items by multiple criteria\n * @public\n * @param {Array<{key: string, direction: string}>} criteria - Sort criteria\n */\n sortMultiple(criteria) {\n const items = [...this.items];\n\n items.sort((a, b) => {\n for (const criterion of criteria) {\n const valueA = a.dataset[criterion.key];\n const valueB = b.dataset[criterion.key];\n\n const comparison =\n criterion.direction === \"asc\"\n ? valueA.localeCompare(valueB)\n : valueB.localeCompare(valueA);\n\n if (comparison !== 0) return comparison;\n }\n return 0;\n });\n\n items.forEach((item) => this.container.appendChild(item));\n\n this.log('debug', 'Sorting items by multiple criteria:', criteria);\n }\n\n /**\n * Filter items by numeric range\n * @public\n * @param {string} key - Data attribute key\n * @param {number} min - Minimum value\n * @param {number} max - Maximum value\n */\n addRangeFilter(key, min, max) {\n this.items.forEach((item) => {\n const value = parseFloat(item.dataset[key]);\n const inRange = value >= min && value <= max;\n\n if (inRange) {\n this.showItem(item);\n } else {\n this.hideItem(item);\n }\n });\n\n setTimeout(() => {\n this.updateCounter();\n }, this.options.animationDuration);\n\n this.log('debug', `Filtering items by range: ${key} between ${min} and ${max}`);\n }\n\n /**\n * Check if item matches filter groups\n * @private\n * @param {Set} itemCategories - Item's categories\n * @returns {boolean} Whether item matches the group filters\n */\n matchesFilterGroups(itemCategories) {\n const groupMatches = [...this.filterGroups.values()].map((group) => {\n const groupFilters = [...group.filters];\n if (groupFilters.length === 0) return true;\n\n return group.operator === \"OR\"\n ? groupFilters.some((filter) => itemCategories.has(filter))\n : groupFilters.every((filter) => itemCategories.has(filter));\n });\n\n return this.groupMode === \"OR\"\n ? groupMatches.some((matches) => matches)\n : groupMatches.every((matches) => matches);\n }\n\n /**\n * Update URL with current filter state\n * @private\n */\n updateURL() {\n this.log('debug', 'Updating URL');\n\n // If only \"*\" filter is active or no filters are active, clear the URL\n if (\n this.currentFilters.size === 0 ||\n (this.currentFilters.size === 1 && this.currentFilters.has(\"*\"))\n ) {\n window.history.pushState({}, \"\", window.location.pathname);\n return;\n }\n\n const params = new URLSearchParams(window.location.search);\n\n // Add groups to URL if they exist\n if (this.filterGroups.size > 0) {\n for (const [groupId, group] of this.filterGroups.entries()) {\n params.set(`group_${groupId}`, [...group.filters].join(\",\"));\n params.set(`groupOp_${groupId}`, group.operator.toLowerCase());\n }\n params.set(\"groupMode\", this.groupMode.toLowerCase());\n }\n\n // Separate filters by type\n const filtersByType = {};\n for (const filter of this.currentFilters) {\n if (filter !== \"*\") {\n const [type, value] = filter.split(\":\");\n if (!filtersByType[type]) {\n filtersByType[type] = new Set();\n }\n filtersByType[type].add(value);\n }\n }\n\n // Add each filter type to the URL\n Object.entries(filtersByType).forEach(([type, values]) => {\n params.set(type, Array.from(values).join(\",\"));\n });\n\n if (this.currentSearch) {\n params.set(\"search\", this.currentSearch);\n }\n\n const newURL = `${window.location.pathname}${\n params.toString() ? \"?\" + params.toString() : \"\"\n }`;\n window.history.pushState({}, \"\", newURL);\n this.log('debug', 'URL updated:', newURL);\n }\n\n /**\n * Load filter state from URL\n * @private\n */\n loadFromURL() {\n this.log('debug', 'Loading state from URL');\n const params = new URLSearchParams(window.location.search);\n\n // Load groups if they exist\n this.filterGroups.clear();\n for (const [key, value] of params.entries()) {\n if (key.startsWith(\"group_\")) {\n const groupId = key.replace(\"group_\", \"\");\n const operator =\n params.get(`groupOp_${groupId}`)?.toUpperCase() || \"OR\";\n const filters = value.split(\",\");\n this.addFilterGroup(groupId, filters, operator);\n }\n }\n\n // Set group mode if present\n const groupMode = params.get(\"groupMode\")?.toUpperCase();\n if (groupMode && [\"AND\", \"OR\"].includes(groupMode)) {\n this.groupMode = groupMode;\n }\n\n this.currentFilters.clear();\n\n // Si aucun filtre n'est présent, utiliser '*'\n let hasFilters = false;\n\n // Parcourir tous les paramètres\n for (const [type, values] of params.entries()) {\n if (type !== \"search\") {\n hasFilters = true;\n values.split(\",\").forEach((value) => {\n this.currentFilters.add(`${type}:${value}`);\n });\n }\n }\n\n if (!hasFilters) {\n this.currentFilters.add(\"*\");\n }\n\n // Update active buttons\n this.filterButtons.forEach((button) => {\n const filterValue = button.dataset.filter;\n if (\n this.currentFilters.has(filterValue) ||\n (filterValue === \"*\" && this.currentFilters.has(\"*\"))\n ) {\n button.classList.add(this.options.activeClass);\n } else {\n button.classList.remove(this.options.activeClass);\n }\n });\n\n // Load search\n const search = params.get(\"search\") || \"\";\n if (this.searchInput) {\n this.searchInput.value = search;\n }\n\n this.filter();\n if (search) {\n this.search(search);\n }\n\n this.log('info', 'State loaded from URL');\n }\n\n /**\n * Update results counter\n * @private\n * @returns {{total: number, visible: number}}\n */\n updateCounter() {\n const total = this.items.length;\n const visible = this.visibleItems.size;\n\n if (this.counter) {\n this.counter.textContent = `Showing ${visible} of ${total}`;\n }\n \n this.log('debug', `Counter updated: ${visible}/${total}`);\n return { total, visible };\n }\n\n /**\n * Set animation options\n * @public\n * @param {Object} options - Animation options\n */\n setAnimationOptions(options = {}) {\n this.options.animationDuration =\n options.duration || this.options.animationDuration;\n this.options.animationType = options.type || \"ease-out\";\n this.addStyles(); // Refresh styles with new options\n }\n\n /**\n * Event handling system\n */\n addEventSystem() {\n this.events = {};\n\n this.on = (eventName, callback) => {\n if (!this.events[eventName]) {\n this.events[eventName] = [];\n }\n this.events[eventName].push(callback);\n };\n\n this.emit = (eventName, data) => {\n if (this.events[eventName]) {\n this.events[eventName].forEach((callback) => callback(data));\n }\n };\n }\n\n /**\n * Add pagination\n * @public\n * @param {number} itemsPerPage - Number of items per page\n */\n setPagination(itemsPerPage) {\n this.pagination = {\n currentPage: 1,\n itemsPerPage: itemsPerPage,\n totalPages: Math.ceil(this.visibleItems.size / itemsPerPage),\n };\n this.updatePagination();\n }\n\n updatePagination() {\n const start =\n (this.pagination.currentPage - 1) * this.pagination.itemsPerPage;\n const end = start + this.pagination.itemsPerPage;\n\n [...this.visibleItems].forEach((item, index) => {\n if (index >= start && index < end) {\n this.showItem(item);\n } else {\n this.hideItem(item);\n }\n });\n }\n\n /**\n * Enable analytics tracking\n * @public\n * @param {Function} callback - Analytics callback function\n */\n enableAnalytics(callback) {\n this.analyticsCallback = callback;\n this.on(\"filter\", (data) => {\n this.analyticsCallback({\n type: \"filter\",\n filters: [...this.currentFilters],\n visibleItems: this.visibleItems.size,\n timestamp: new Date().toISOString(),\n });\n });\n }\n\n /**\n * Sort with custom comparator\n * @public\n * @param {string} key - Data attribute key\n * @param {Function} comparator - Custom comparison function\n */\n sortWithComparator(key, comparator) {\n const items = [...this.items];\n items.sort((a, b) => {\n const valueA = a.dataset[key];\n const valueB = b.dataset[key];\n return comparator(valueA, valueB);\n });\n items.forEach((item) => this.container.appendChild(item));\n }\n\n /**\n * Add responsive behavior\n * @public\n * @param {Object} breakpoints - Breakpoint configurations\n */\n setResponsiveOptions(breakpoints) {\n window.addEventListener(\n \"resize\",\n debounce(() => {\n const width = window.innerWidth;\n for (const [breakpoint, options] of Object.entries(breakpoints)) {\n if (width <= parseInt(breakpoint)) {\n Object.assign(this.options, options);\n this.filter();\n break;\n }\n }\n }, 250),\n );\n }\n\n /**\n * Enable keyboard navigation\n * @public\n */\n enableKeyboardNavigation() {\n document.addEventListener(\"keydown\", (e) => {\n if (\n e.key === \"Enter\" &&\n document.activeElement.classList.contains(\n this.options.filterButtonSelector.slice(1),\n )\n ) {\n document.activeElement.click();\n }\n });\n }\n\n /**\n * Export current filter state\n * @public\n * @returns {Object} Filter state\n */\n exportState() {\n return {\n filters: [...this.currentFilters],\n search: this.currentSearch,\n mode: this.options.filterMode,\n timestamp: new Date().toISOString(),\n };\n }\n\n /**\n * Import filter state\n * @public\n * @param {Object} state - Filter state to import\n */\n importState(state) {\n if (state.filters) {\n this.currentFilters = new Set(state.filters);\n this.currentSearch = state.search || \"\";\n this.options.filterMode = state.mode || \"OR\";\n this.filter();\n this.updateURL();\n }\n }\n\n /**\n * Save current filter state as preset\n * @public\n * @param {string} presetName - Name of the preset\n */\n savePreset(presetName) {\n const preset = {\n filters: [...this.currentFilters],\n search: this.currentSearch,\n mode: this.options.filterMode,\n };\n localStorage.setItem(`afs_preset_${presetName}`, JSON.stringify(preset));\n\n this.log('info', `Preset saved: ${presetName}`);\n }\n\n /**\n * Load filter preset\n * @public\n * @param {string} presetName - Name of the preset to load\n */\n loadPreset(presetName) {\n const preset = JSON.parse(localStorage.getItem(`afs_preset_${presetName}`));\n if (preset) {\n this.currentFilters = new Set(preset.filters);\n this.currentSearch = preset.search;\n this.options.filterMode = preset.mode;\n this.filter();\n this.updateURL();\n }\n }\n\n /**\n * Set filter logic mode (alias for setFilterMode)\n * @public\n * @param {string} logic - New filter logic ('AND' or 'OR')\n */\n setLogic(logic) {\n if (typeof logic === \"boolean\") {\n // Handle boolean input (true = AND, false = OR)\n this.options.filterMode = logic ? \"AND\" : \"OR\";\n this.filter();\n return;\n }\n\n const mode = logic.toUpperCase();\n if ([\"OR\", \"AND\"].includes(mode)) {\n this.options.filterMode = mode;\n this.filter();\n }\n }\n\n /**\n * Change filter mode\n * @public\n * @param {string} mode - New filter mode ('OR' or 'AND')\n */\n setFilterMode(mode) {\n if ([\"OR\", \"AND\"].includes(mode.toUpperCase())) {\n this.options.filterMode = mode.toUpperCase();\n this.filter();\n }\n }\n\n /**\n * Add filter by type and value\n * @public\n * @param {string} type - Filter type\n * @param {string} value - Filter value\n */\n addFilter(type, value) {\n this.currentFilters.add(`${type}:${value}`);\n this.filter();\n this.updateURL();\n }\n\n /**\n * Remove filter by type and value\n * @public\n * @param {string} type - Filter type\n */\n removeFilter(type, value) {\n this.currentFilters.delete(`${type}:${value}`);\n if (this.currentFilters.size === 0) {\n this.currentFilters.add(\"*\");\n }\n this.filter();\n this.updateURL();\n }\n\n /**\n * Get active filters by type\n * @public\n * @param {string} type - Filter type\n */\n getActiveFiltersByType(type) {\n return [...this.currentFilters]\n .filter((filter) => filter.startsWith(`${type}:`))\n .map((filter) => filter.split(\":\")[1]);\n }\n\n /**\n * Clear all filters, url and search\n *\n * @public\n */\n clearAllFilters() {\n this.currentFilters.clear();\n this.currentFilters.add(\"*\");\n this.filter();\n this.updateURL();\n\n // Uncheck all checkboxes if any with activeClass\n const checkboxes = document.querySelectorAll('input[type=\"checkbox\"]');\n checkboxes.forEach((checkbox) => {\n if (checkbox.classList.contains(this.options.activeClass)) {\n checkbox.checked = false;\n checkbox.classList.remove(this.options.activeClass);\n }\n });\n\n // Clear active on buttons\n this.filterButtons.forEach((btn) => {\n btn.classList.remove(this.options.activeClass);\n });\n\n // Clear search input\n if (this.searchInput) {\n this.searchInput.value = \"\";\n }\n\n this.log('info', 'All filters cleared');\n }\n}\n\nexport { AFS };\n"],"names":["debounce","func","wait","timeout","executedFunction","_len","arguments","length","args","Array","_key","later","clearTimeout","setTimeout","AFS","constructor","options","undefined","containerSelector","itemSelector","filterButtonSelector","searchInputSelector","counterSelector","activeClass","hiddenClass","animationDuration","filterMode","searchKeys","debounceTime","debug","logLevel","logLevels","error","warn","info","container","document","querySelector","items","querySelectorAll","sortOrders","filterButtons","searchInput","counter","currentFilters","Set","currentSearch","visibleItems","filterGroups","Map","groupMode","log","init","level","currentLevelValue","messageLevel","timestamp","Date","toISOString","prefix","toUpperCase","_len2","_key2","console","setDebugMode","enabled","hasOwnProperty","addStyles","bindEvents","loadFromURL","updateCounter","styles","styleSheet","createElement","textContent","head","appendChild","forEach","button","addEventListener","handleFilterClick","e","search","target","value","window","filterValue","dataset","filter","resetFilters","toggleFilter","updateURL","btn","classList","remove","clear","add","resetCounter","delete","contains","size","history","pushState","location","pathname","sortWithOrder","key","currentOrder","newOrder","sort","a","b","valueA","valueB","isNumeric","isNaN","parseFloat","localeCompare","item","shuffle","itemsArray","i","j","Math","floor","random","standardFilter","has","showItem","itemCategories","categories","split","matchesFilter","matchesAnyFilter","matchesAllFilters","hideItem","matchesGroups","matchesFilterGroups","addFilterGroup","groupId","filters","operator","isArray","validOperator","includes","set","updateFiltersFromGroups","setGroupMode","mode","validMode","removeFilterGroup","group","values","some","type","every","style","opacity","transform","offsetHeight","requestAnimationFrame","query","toLowerCase","trim","matches","searchText","map","join","matchesSearch","sortMultiple","criteria","criterion","comparison","direction","addRangeFilter","min","max","inRange","groupMatches","groupFilters","params","URLSearchParams","entries","filtersByType","Object","_ref","from","newURL","toString","startsWith","replace","get","hasFilters","total","visible","setAnimationOptions","duration","animationType","addEventSystem","events","on","eventName","callback","push","emit","data","setPagination","itemsPerPage","pagination","currentPage","totalPages","ceil","updatePagination","start","end","index","enableAnalytics","analyticsCallback","sortWithComparator","comparator","setResponsiveOptions","breakpoints","width","innerWidth","breakpoint","parseInt","assign","enableKeyboardNavigation","activeElement","slice","click","exportState","importState","state","savePreset","presetName","preset","localStorage","setItem","JSON","stringify","loadPreset","parse","getItem","setLogic","logic","setFilterMode","addFilter","removeFilter","getActiveFiltersByType","clearAllFilters","checkboxes","checkbox","checked"],"mappings":"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"}
|