advanced-filter-system 1.0.2 → 1.0.4
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 +10 -0
- package/dist/AFS.esm.js +384 -14
- package/dist/AFS.esm.js.map +1 -1
- package/dist/AFS.js +761 -393
- 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 +23 -4
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.0\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(\n this.options.searchInputSelector,\n );\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\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\", () =>\n this.handleFilterClick(button),\n );\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 (this.currentFilters.size === 0) {\n this.resetFilters();\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 filter() {\n this.visibleItems.clear(); // Start with an empty set\n\n this.items.forEach((item) => {\n if (this.currentFilters.has(\"*\")) {\n this.showItem(item);\n this.visibleItems.add(item); // Add visible item to the set\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); // Add visible item to the set\n } else {\n this.hideItem(item);\n }\n }\n });\n\n setTimeout(() => {\n this.updateCounter();\n }, this.options.animationDuration);\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 === \"\" ||\n 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 * Update URL with current filter state\n * @private\n */\n updateURL() {\n const params = new URLSearchParams();\n\n // Séparer les filtres par 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 // Ajouter chaque type de filtre à l'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 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 * 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","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","item","has","showItem","itemCategories","categories","split","matchesFilter","matchesAnyFilter","matchesAllFilters","hideItem","some","type","every","style","opacity","transform","offsetHeight","requestAnimationFrame","query","toLowerCase","trim","searchText","map","key","join","matchesSearch","includes","sortMultiple","criteria","sort","a","b","criterion","valueA","valueB","comparison","direction","localeCompare","addRangeFilter","min","max","parseFloat","inRange","params","URLSearchParams","filtersByType","Object","entries","_ref","values","set","from","newURL","location","pathname","toString","history","pushState","hasFilters","get","total","visible","setFilterMode","mode","toUpperCase","addFilter","removeFilter","getActiveFiltersByType","startsWith"],"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.0\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 (this.currentFilters.size === 0) {\n this.resetFilters();\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 */\nfilter() {\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(item.dataset.categories?.split(\" \") || []);\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 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 // Séparer les filtres par 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 // Ajouter chaque type de filtre à l'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","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","location","entries","filtersByType","Object","_ref","from","newURL","pathname","toString","history","pushState","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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"}
|