advanced-filter-system 1.0.6 → 1.0.7

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/dist/AFS.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"AFS.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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"}
1
+ {"version":3,"file":"AFS.js","sources":["../src/core/Logger.js","../src/core/Options.js","../src/core/State.js","../src/styles/StyleManager.js","../src/core/EventEmitter.js","../src/styles/Animation.js","../src/features/Filter.js","../src/utils/index.js","../src/features/Search.js","../src/features/Sort.js","../src/features/Pagination.js","../src/features/URLManager.js","../src/features/RangeFilter.js","../src/features/DateFilter.js","../src/AFS.js"],"sourcesContent":["/**\n * @fileoverview Logging system for AFS\n */\n\nexport class Logger {\n /**\n * @param {boolean} [debug=false] - Enable debug mode\n * @param {string} [logLevel='info'] - Logging level\n */\n constructor(debug = false, logLevel = 'info') {\n this.enabled = debug;\n this.level = logLevel;\n this.levels = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3\n };\n }\n\n /**\n * Internal log method\n * @private\n */\n _log(level, ...args) {\n if (!this.enabled) return;\n\n const currentLevelValue = this.levels[this.level];\n const messageLevel = this.levels[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 * Log error message\n * @public\n */\n error(...args) {\n this._log('error', ...args);\n }\n\n /**\n * Log warning message\n * @public\n */\n warn(...args) {\n this._log('warn', ...args);\n }\n\n /**\n * Log info message\n * @public\n */\n info(...args) {\n this._log('info', ...args);\n }\n\n /**\n * Log debug message\n * @public\n */\n debug(...args) {\n this._log('debug', ...args);\n }\n\n /**\n * Enable or disable debug mode\n * @public\n */\n setDebugMode(enabled, level = 'info') {\n this.enabled = enabled;\n if (this.levels.hasOwnProperty(level)) {\n this.level = level;\n }\n this._log('info', `Debug mode ${enabled ? 'enabled' : 'disabled'} with level: ${level}`);\n }\n}","/**\n * @fileoverview Configuration management for AFS\n */\n\nexport class Options {\n /**\n * @typedef {Object} AFSOptions\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 state class\n * @property {string} hiddenClass - Hidden state class\n * @property {number} animationDuration - Animation duration in ms\n * @property {string} filterMode - Filter mode ('OR' or 'AND')\n * @property {string[]} searchKeys - Data attributes to search in\n * @property {number} debounceTime - Search debounce delay in ms\n * @property {boolean} debug - Enable debug mode\n * @property {string} logLevel - Log level\n * @property {string} dateFormat - Date format\n * @property {Object} counter - Counter-related options\n * @property {Object} styles - Style-related options\n */\n\n /**\n * @type {AFSOptions}\n */\n static defaults = {\n // Selectors\n containerSelector: '.filter-container',\n itemSelector: '.filter-item',\n filterButtonSelector: '.btn-filter',\n searchInputSelector: '.filter-search',\n counterSelector: '.filter-counter',\n\n // Classes\n activeClass: 'active',\n hiddenClass: 'hidden',\n\n // Animation\n animationDuration: 300,\n animationType: 'fade',\n animationEasing: 'ease-out',\n\n // Filtering\n filterMode: 'OR',\n searchKeys: ['title'],\n debounceTime: 300,\n\n // Debug\n debug: false,\n logLevel: 'info',\n\n // Date handling\n dateFormat: 'YYYY-MM-DD',\n\n counter: {\n template: 'Showing {visible} of {total}',\n showFiltered: true,\n filteredTemplate: '({filtered} filtered)',\n noResultsTemplate: 'No items found',\n formatter: (num) => num.toLocaleString()\n },\n\n // Styles\n styles: {\n slider: {\n class: 'afs-range-slider',\n trackClass: 'afs-range-track',\n thumbClass: 'afs-range-thumb',\n valueClass: 'afs-range-value',\n selectedClass: 'afs-range-selected',\n // Add new UI options\n ui: {\n showHistogram: false,\n bins: 10 // Number of bins for histogram\n }\n },\n colors: {\n primary: '#000',\n background: '#e5e7eb',\n text: '#000',\n histogram: '#e5e7eb', // For histogram bars\n histogramActive: '#000' // For active histogram bars\n }\n },\n\n // Pagination\n pagination: {\n enabled: false,\n itemsPerPage: 10,\n container: '.afs-pagination-container',\n pageButtonClass: 'afs-page-button',\n activePageClass: 'afs-page-active',\n containerClass: 'afs-pagination',\n scrollToTop: false,\n scrollOffset: 50,\n scrollBehavior: 'smooth', // or 'auto' for instant scroll\n }\n };\n\n constructor(userOptions = {}) {\n this.options = this.mergeOptions(Options.defaults, userOptions);\n this.initializeStyles();\n this.validate();\n }\n\n /**\n * Initialize styles with defaults\n * @private\n */\n initializeStyles() {\n const defaultStyles = Options.defaults.styles;\n const currentStyles = this.options.styles || {};\n\n this.options.styles = this.mergeOptions(defaultStyles, currentStyles);\n\n // Ensure colors object exists and has all required properties\n this.options.styles.colors = {\n ...defaultStyles.colors,\n ...(currentStyles.colors || {})\n };\n}\n\n /**\n * Deep merge options\n * @private\n * @param {Object} target - Target object\n * @param {Object} source - Source object\n * @returns {Object} Merged options\n */\n mergeOptions(target, source) {\n const result = { ...target };\n \n for (const key in source) {\n if (source[key] !== null && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n // If the key doesn't exist in target or isn't an object, create/override it\n if (!target[key] || typeof target[key] !== 'object') {\n result[key] = {};\n }\n // Recursively merge nested objects\n result[key] = this.mergeOptions(result[key], source[key]);\n } else if (source[key] !== undefined) {\n // Only override if the source value is defined\n result[key] = source[key];\n }\n }\n \n return result;\n }\n\n /**\n * Validate options\n * @private\n * @throws {Error} If options are invalid\n */\n validate() {\n // Required selectors\n const requiredSelectors = ['containerSelector', 'itemSelector'];\n for (const selector of requiredSelectors) {\n if (typeof this.options[selector] !== 'string') {\n throw new Error(`${selector} must be a string`);\n }\n }\n\n // Animation duration\n if (typeof this.options.animationDuration !== 'number' || this.options.animationDuration < 0) {\n throw new Error('animationDuration must be a positive number');\n }\n\n // Filter mode\n if (!['OR', 'AND'].includes(this.options.filterMode.toUpperCase())) {\n throw new Error('filterMode must be either \"OR\" or \"AND\"');\n }\n\n // Search keys\n if (!Array.isArray(this.options.searchKeys) || this.options.searchKeys.length === 0) {\n throw new Error('searchKeys must be a non-empty array');\n }\n\n // Counter validation\n if (this.options.counter) {\n if (typeof this.options.counter.template !== 'string') {\n throw new Error('counter.template must be a string');\n }\n if (typeof this.options.counter.showFiltered !== 'boolean') {\n this.options.counter.showFiltered = true; // Set default\n }\n if (typeof this.options.counter.formatter !== 'function') {\n this.options.counter.formatter = (num) => num.toLocaleString(); // Set default\n }\n } else {\n this.options.counter = { ...Options.defaults.counter }; // Set defaults if missing\n }\n }\n\n /**\n * Get option value\n * @param {string} path - Dot notation path to option\n * @returns {any} Option value\n */\n get(path) {\n return path.split('.').reduce((obj, key) => obj?.[key], this.options);\n }\n\n /**\n * Set option value\n * @param {string} path - Dot notation path to option\n * @param {any} value - New value\n */\n set(path, value) {\n const parts = path.split('.');\n const last = parts.pop();\n const target = parts.reduce((obj, key) => {\n if (!(key in obj)) obj[key] = {};\n return obj[key];\n }, this.options);\n\n target[last] = value;\n this.validate();\n }\n\n /**\n * Update multiple options\n * @param {Object} updates - Options to update\n */\n update(updates) {\n this.options = this.mergeOptions(this.options, updates);\n this.validate();\n }\n\n /**\n * Reset options to defaults\n */\n reset() {\n this.options = { ...Options.defaults };\n }\n\n /**\n * Export options\n * @returns {Object} Current options\n */\n export() {\n return { ...this.options };\n }\n}","/**\n * @fileoverview State management for AFS\n */\n\nexport class State {\n constructor() {\n this.state = {\n filters: {\n current: new Set(['*']),\n groups: new Map(),\n ranges: new Map(),\n dateRanges: new Map(),\n mode: 'OR',\n groupMode: 'OR'\n },\n search: {\n query: '',\n keys: ['title']\n },\n sort: {\n orders: {},\n current: null\n },\n items: {\n visible: new Set(),\n total: 0\n },\n pagination: {\n currentPage: 1,\n itemsPerPage: 10,\n totalPages: 0\n }\n };\n }\n\n /**\n * Get current state\n * @returns {Object} Current state\n */\n getState() {\n return this.state;\n }\n\n /**\n * Update state\n * @param {string} path - Dot notation path to update\n * @param {any} value - New value\n */\n setState(path, value) {\n const parts = path.split('.');\n let current = this.state;\n \n for (let i = 0; i < parts.length - 1; i++) {\n if (!(parts[i] in current)) {\n current[parts[i]] = {};\n }\n current = current[parts[i]];\n }\n \n current[parts[parts.length - 1]] = value;\n }\n\n /**\n * Export state\n * @returns {Object} Exportable state\n */\n export() {\n return {\n filters: {\n current: Array.from(this.state.filters.current),\n groups: Array.from(this.state.filters.groups.entries()),\n ranges: Array.from(this.state.filters.ranges.entries()),\n dateRanges: Array.from(this.state.filters.dateRanges.entries()),\n mode: this.state.filters.mode,\n groupMode: this.state.filters.groupMode\n },\n search: { ...this.state.search },\n sort: { ...this.state.sort },\n pagination: { ...this.state.pagination }\n };\n }\n\n /**\n * Import state\n * @param {Object} importedState - State to import\n */\n import(importedState) {\n if (importedState.filters) {\n this.state.filters.current = new Set(importedState.filters.current);\n this.state.filters.groups = new Map(importedState.filters.groups);\n this.state.filters.ranges = new Map(importedState.filters.ranges);\n this.state.filters.dateRanges = new Map(importedState.filters.dateRanges);\n this.state.filters.mode = importedState.filters.mode;\n this.state.filters.groupMode = importedState.filters.groupMode;\n }\n\n if (importedState.search) {\n this.state.search = { ...importedState.search };\n }\n\n if (importedState.sort) {\n this.state.sort = { ...importedState.sort };\n }\n\n if (importedState.pagination) {\n this.state.pagination = { ...importedState.pagination };\n }\n }\n\n /**\n * Reset state to initial values\n */\n reset() {\n this.state = {\n filters: {\n current: new Set(['*']),\n groups: new Map(),\n ranges: new Map(),\n dateRanges: new Map(),\n mode: 'OR',\n groupMode: 'OR'\n },\n search: {\n query: '',\n keys: ['title']\n },\n sort: {\n orders: {},\n current: null\n },\n items: {\n visible: new Set(),\n total: 0\n },\n pagination: {\n currentPage: 1,\n itemsPerPage: 10,\n totalPages: 0\n }\n };\n }\n}","/**\n * @fileoverview Style management for AFS\n */\n\nexport class StyleManager {\n /**\n * @param {import('../core/Options').Options} options - Options instance\n */\n constructor(options) {\n this.options = options;\n this.styleElement = null;\n this.defaultStyles = {\n slider: {\n class: \"afs-range-slider\",\n trackClass: \"afs-range-track\",\n thumbClass: \"afs-range-thumb\",\n valueClass: \"afs-range-value\",\n selectedClass: \"afs-range-selected\",\n },\n colors: {\n primary: \"#000\",\n background: \"#ddd\",\n text: \"#000\",\n },\n animation: {\n duration: \"300ms\",\n type: \"ease-out\",\n },\n };\n }\n\n /**\n * Create base styles\n * @private\n * @returns {string} CSS styles\n */\n createBaseStyles() {\n const hiddenClass = this.options.get(\"hiddenClass\") || \"hidden\";\n const itemSelector = this.options.get(\"itemSelector\") || \".filter-item\";\n const filterButtonSelector = this.options.get(\"filterButtonSelector\") || \".btn-filter\";\n const activeClass = this.options.get(\"activeClass\") || \"active\";\n const animationDuration = this.options.get(\"animationDuration\") || '300ms';\n const animationEasing = this.options.get(\"animationEasing\") || 'ease-out';\n \n return `\n .${hiddenClass} {\n display: none !important;\n }\n\n ${itemSelector} {\n opacity: 1;\n transform: scale(1);\n filter: blur(0);\n transition: opacity ${animationDuration} ${animationEasing},\n transform ${animationDuration} ${animationEasing},\n filter ${animationDuration} ${animationEasing};\n }\n\n ${itemSelector}.${hiddenClass} {\n opacity: 0;\n transform: scale(0.95);\n filter: blur(5px);\n }\n\n ${filterButtonSelector} {\n opacity: 0.5;\n transition: opacity ${animationDuration} ${animationEasing};\n }\n\n ${filterButtonSelector}.${activeClass} {\n opacity: 1;\n }\n `;\n}\n\n /**\n * Create range slider styles\n * @private\n * @returns {string} CSS styles\n */\n createRangeStyles() {\n const styles = this.options.get(\"styles\") || this.defaultStyles;\n const sliderStyles = styles.slider || this.defaultStyles.slider;\n const colors = styles.colors || this.defaultStyles.colors;\n\n return `\n /* Range Slider Styles */\n .${sliderStyles.class} {\n position: relative;\n width: auto;\n height: 40px;\n margin: 10px 0;\n padding: 0 8px;\n }\n\n .${sliderStyles.trackClass} {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 100%;\n height: 4px;\n background: ${colors.background};\n border-radius: 2px;\n }\n\n .${sliderStyles.thumbClass} {\n position: absolute;\n top: 50%;\n width: 16px;\n height: 16px;\n background: ${colors.primary};\n border-radius: 50%;\n transform: translate(-50%, -50%);\n cursor: pointer;\n z-index: 2;\n }\n\n .${sliderStyles.valueClass} {\n position: absolute;\n top: -20px;\n transform: translateX(-50%);\n font-size: 10px;\n color: ${colors.text};\n }\n\n .${sliderStyles.selectedClass} {\n position: absolute;\n height: 4px;\n background: ${colors.primary};\n top: 50%;\n transform: translateY(-50%);\n }\n\n /* Histogram Styles */\n .afs-histogram {\n position: absolute;\n bottom: 22px;\n left: 8px;\n right: 8px;\n height: 20px;\n display: flex;\n align-items: flex-end;\n gap: 1px;\n opacity: 0.5;\n }\n\n .afs-histogram-bar {\n flex: 1;\n background-color: ${colors.background};\n min-height: 4px;\n transition: background-color 0.2s ease;\n }\n\n .afs-histogram-bar.active {\n background-color: ${colors.primary};\n }\n `;\n }\n\n /**\n * Create date filter styles\n * @private\n * @returns {string} CSS styles\n */\n createDateStyles() {\n const colors = (this.options.get(\"styles\") || this.defaultStyles).colors;\n\n return `\n .afs-date-range-container {\n display: flex;\n flex-wrap: wrap;\n gap: 1rem;\n margin: 10px 0;\n }\n\n .afs-date-input-wrapper {\n flex: 1;\n }\n\n .afs-date-input-wrapper label {\n display: block;\n font-size: 0.875rem;\n color: ${colors.text};\n margin-bottom: 0.5rem;\n }\n\n .afs-date-input {\n width: 100%;\n padding: 0.5rem;\n border: 1px solid ${colors.background};\n border-radius: 0.25rem;\n font-size: 0.875rem;\n color: ${colors.text};\n transition: border-color 0.2s ease;\n }\n\n .afs-date-input:focus {\n outline: none;\n border-color: ${colors.primary};\n }\n `;\n }\n\n /**\n * Apply all styles\n * @public\n */\n applyStyles() {\n try {\n const styles = `\n /* Base styles */\n ${this.createBaseStyles()}\n\n /* Range slider styles */\n ${this.createRangeStyles()}\n\n /* Date filter styles */\n ${this.createDateStyles()}\n\n /* Pagination styles */\n ${this.createPaginationStyles()}\n\n /* Search styles */\n ${this.createSearchStyles()}\n `;\n\n if (this.styleElement) {\n this.styleElement.textContent = styles;\n } else {\n this.styleElement = document.createElement(\"style\");\n this.styleElement.textContent = styles;\n document.head.appendChild(this.styleElement);\n }\n } catch (error) {\n console.error(\"Error applying styles:\", error);\n const fallbackStyles = this.createBaseStyles();\n if (this.styleElement) {\n this.styleElement.textContent = fallbackStyles;\n } else {\n this.styleElement = document.createElement(\"style\");\n this.styleElement.textContent = fallbackStyles;\n document.head.appendChild(this.styleElement);\n }\n }\n }\n\n /**\n * Create pagination styles\n * @private\n * @returns {string} CSS styles\n */\n createPaginationStyles() {\n const paginationOptions = this.options.get(\"pagination\") || {};\n const colors = (this.options.get(\"styles\") || this.defaultStyles).colors;\n\n const containerClass = paginationOptions.containerClass || \"afs-pagination\";\n const buttonClass = paginationOptions.pageButtonClass || \"afs-page-button\";\n const activeClass = paginationOptions.activePageClass || \"afs-page-active\";\n\n return `\n .${containerClass} {\n display: flex;\n justify-content: center;\n gap: 8px;\n margin-top: 20px;\n }\n\n .${buttonClass} {\n padding: 8px 12px;\n border: 1px solid ${colors.primary};\n border-radius: 4px;\n cursor: pointer;\n transition: all 200ms ease-out;\n background: transparent;\n color: ${colors.primary};\n }\n\n .${buttonClass}:hover {\n background: ${colors.primary};\n color: white;\n }\n\n .${buttonClass}.${activeClass} {\n background: ${colors.primary};\n color: white;\n }\n\n .${buttonClass}:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n `;\n }\n\n /**\n * Create search styles\n * @private\n * @returns {string} CSS styles\n */\n createSearchStyles() {\n const searchClass = this.options.get(\"searchInputClass\") || \"afs-search\";\n const colors = (this.options.get(\"styles\") || this.defaultStyles).colors;\n\n return `\n .${searchClass} {\n padding: 8px;\n border: 1px solid ${colors.background};\n border-radius: 4px;\n width: 100%;\n max-width: 300px;\n transition: border-color 200ms ease-out;\n }\n\n .${searchClass}:focus {\n outline: none;\n border-color: ${colors.primary};\n }\n `;\n }\n\n /**\n * Update styles\n * @public\n * @param {Object} newOptions - New style options\n */\n updateStyles(newOptions) {\n this.options = newOptions;\n this.applyStyles();\n }\n\n /**\n * Remove styles\n * @public\n */\n removeStyles() {\n if (this.styleElement) {\n this.styleElement.remove();\n this.styleElement = null;\n }\n }\n}\n","/**\n * @fileoverview Event handling system for AFS\n */\n\nexport class EventEmitter {\n constructor() {\n this.events = new Map();\n this.onceEvents = new Map();\n }\n\n /**\n * Subscribe to an event\n * @param {string} eventName - Name of the event\n * @param {Function} callback - Callback function\n * @returns {Function} Unsubscribe function\n */\n on(eventName, callback) {\n if (!this.events.has(eventName)) {\n this.events.set(eventName, new Set());\n }\n\n this.events.get(eventName).add(callback);\n\n // Return unsubscribe function\n return () => this.off(eventName, callback);\n }\n\n /**\n * Subscribe to an event once\n * @param {string} eventName - Name of the event\n * @param {Function} callback - Callback function\n * @returns {Function} Unsubscribe function\n */\n once(eventName, callback) {\n const onceWrapper = (...args) => {\n this.off(eventName, onceWrapper);\n callback.apply(this, args);\n };\n\n if (!this.onceEvents.has(eventName)) {\n this.onceEvents.set(eventName, new Map());\n }\n\n this.onceEvents.get(eventName).set(callback, onceWrapper);\n return this.on(eventName, onceWrapper);\n }\n\n /**\n * Unsubscribe from an event\n * @param {string} eventName - Name of the event\n * @param {Function} callback - Callback function\n */\n off(eventName, callback) {\n // Remove from regular events\n if (this.events.has(eventName)) {\n this.events.get(eventName).delete(callback);\n\n // Cleanup if no more listeners\n if (this.events.get(eventName).size === 0) {\n this.events.delete(eventName);\n }\n }\n\n // Remove from once events\n if (this.onceEvents.has(eventName)) {\n const onceWrapper = this.onceEvents.get(eventName).get(callback);\n if (onceWrapper) {\n this.events.get(eventName)?.delete(onceWrapper);\n this.onceEvents.get(eventName).delete(callback);\n }\n\n // Cleanup if no more once listeners\n if (this.onceEvents.get(eventName).size === 0) {\n this.onceEvents.delete(eventName);\n }\n }\n }\n\n /**\n * Emit an event\n * @param {string} eventName - Name of the event\n * @param {...any} args - Arguments to pass to callbacks\n */\n emit(eventName, ...args) {\n if (this.events.has(eventName)) {\n this.events.get(eventName).forEach(callback => {\n try {\n callback.apply(this, args);\n } catch (error) {\n console.error(`Error in event handler for ${eventName}:`, error);\n }\n });\n }\n }\n\n /**\n * Remove all event listeners\n * @param {string} [eventName] - Optional event name to clear specific event\n */\n removeAllListeners(eventName) {\n if (eventName) {\n this.events.delete(eventName);\n this.onceEvents.delete(eventName);\n } else {\n this.events.clear();\n this.onceEvents.clear();\n }\n }\n\n /**\n * Get the number of listeners for an event\n * @param {string} eventName - Name of the event\n * @returns {number} Number of listeners\n */\n listenerCount(eventName) {\n return (this.events.get(eventName)?.size || 0) + \n (this.onceEvents.get(eventName)?.size || 0);\n }\n}","/**\n * @fileoverview Animation management for AFS\n */\n\nexport class Animation {\n constructor(afs) {\n this.afs = afs;\n this.options = this.afs.options;\n this.animations = {\n fade: {\n in: { opacity: 1, transform: 'scale(1)', transitionTimingFunction: 'ease-in' },\n out: { opacity: 0, transform: 'scale(0.95)', transitionTimingFunction: 'ease-out' },\n },\n slide: {\n in: { opacity: 1, transform: 'translateY(0)', transitionTimingFunction: 'ease-in-out' },\n out: { opacity: 0, transform: 'translateY(20px)', transitionTimingFunction: 'ease-in-out' },\n },\n scale: {\n in: { opacity: 1, transform: 'scale(1)', transitionTimingFunction: 'ease-in' },\n out: { opacity: 0, transform: 'scale(0.8)', transitionTimingFunction: 'ease-out' },\n },\n rotate: {\n in: { opacity: 1, transform: 'rotate(0deg) scale(1)', transitionTimingFunction: 'ease-in' },\n out: { opacity: 0, transform: 'rotate(90deg) scale(0.9)', transitionTimingFunction: 'ease-out' },\n },\n flip: {\n in: { opacity: 1, transform: 'rotateY(0)', transitionTimingFunction: 'ease-in' },\n out: { opacity: 0, transform: 'rotateY(180deg)', transitionTimingFunction: 'ease-out' },\n },\n zoom: {\n in: { opacity: 1, transform: 'scale(1.2)', transitionTimingFunction: 'ease-in' },\n out: { opacity: 0, transform: 'scale(0.8)', transitionTimingFunction: 'ease-out' },\n },\n bounce: {\n in: { opacity: 1, transform: 'translateY(0)', animation: 'bounce 1s cubic-bezier(0.68, -0.55, 0.27, 1.55)' },\n out: { opacity: 0, transform: 'translateY(-20px)', animation: 'bounceOut 1s ease-out' },\n },\n blur: {\n in: { opacity: 1, filter: 'blur(0)', transitionTimingFunction: 'ease-in' },\n out: { opacity: 0, filter: 'blur(5px)', transitionTimingFunction: 'ease-out' },\n },\n skew: {\n in: { opacity: 1, transform: 'skew(0deg)', transitionTimingFunction: 'ease-in-out' },\n out: { opacity: 0, transform: 'skew(10deg)', transitionTimingFunction: 'ease-in-out' },\n },\n slideInLeft: {\n in: { opacity: 1, transform: 'translateX(0)', transitionTimingFunction: 'ease-in' },\n out: { opacity: 0, transform: 'translateX(-100%)', transitionTimingFunction: 'ease-out' },\n },\n slideInRight: {\n in: { opacity: 1, transform: 'translateX(0)', transitionTimingFunction: 'ease-in' },\n out: { opacity: 0, transform: 'translateX(100%)', transitionTimingFunction: 'ease-out' },\n },\n fadeInUp: {\n in: { opacity: 1, transform: 'translateY(0)', transitionTimingFunction: 'ease-in' },\n out: { opacity: 0, transform: 'translateY(10px)', transitionTimingFunction: 'ease-out' },\n },\n fadeInDown: {\n in: { opacity: 1, transform: 'translateY(0)', transitionTimingFunction: 'ease-in' },\n out: { opacity: 0, transform: 'translateY(-10px)', transitionTimingFunction: 'ease-out' },\n },\n bounceIn: {\n in: { opacity: 1, transform: 'scale(1.05)', transitionTimingFunction: 'cubic-bezier(0.68, -0.55, 0.27, 1.55)' },\n out: { opacity: 0, transform: 'scale(0.9)', transitionTimingFunction: 'ease-out' },\n },\n };\n }\n \n applyShowAnimation(item, animationType = 'fade') {\n const duration = this.options.get('animationDuration') || '300ms';\n const animation = this.animations[animationType]?.in || this.animations.fade.in;\n \n item.style.display = 'block';\n requestAnimationFrame(() => {\n Object.assign(item.style, animation, {\n transition: `opacity ${duration} ${animation.transitionTimingFunction}, transform ${duration} ${animation.transitionTimingFunction}`,\n });\n });\n }\n \n applyHideAnimation(item, animationType = 'fade') {\n const duration = this.options.get('animationDuration') || '300ms';\n const animation = this.animations[animationType]?.out || this.animations.fade.out;\n \n Object.assign(item.style, animation, {\n transition: `opacity ${duration} ${animation.transitionTimingFunction}, transform ${duration} ${animation.transitionTimingFunction}`,\n });\n\n const handleTransitionEnd = () => {\n item.style.display = 'none';\n item.removeEventListener('transitionend', handleTransitionEnd);\n };\n item.addEventListener('transitionend', handleTransitionEnd);\n }\n\n setAnimation(animationType) {\n this.afs.options.set('animationType', animationType);\n }\n}","/**\n * @fileoverview Filter functionality for AFS\n */\n\nimport { Animation } from '../styles/Animation.js';\n\nexport class Filter {\n /**\n * @param {import('../AFS').AFS} afs - Main AFS instance\n */\n constructor(afs) {\n this.afs = afs;\n this.animation = new Animation(afs);\n this.filterButtons = new Map();\n this.activeFilters = new Set([\"*\"]);\n this.currentFilters = new Set([\"*\"]);\n this.filterGroups = new Map();\n this.sortOrders = new Map();\n this.setupFilters();\n }\n\n /**\n * Setup filters\n * @private\n */\n setupFilters() {\n this.afs.logger.debug(\"Setting up filters\");\n const filterSelector = this.afs.options.get(\"filterButtonSelector\");\n if (!filterSelector) return;\n\n // Initialize filter buttons\n document.querySelectorAll(filterSelector).forEach((button) => {\n const filterValue = button.dataset.filter;\n if (!filterValue) {\n this.afs.logger.warn(\n \"Filter button missing data-filter attribute:\",\n button,\n );\n return;\n }\n\n this.filterButtons.set(button, filterValue);\n this.bindFilterEvent(button);\n });\n\n this.afs.logger.debug(\"Filters initialized\");\n }\n\n /**\n * Set filter logic mode\n * @public\n * @param {string|boolean} logic - 'AND'/'OR' or true/false (true = AND, false = OR)\n */\n setLogic(logic) {\n if (typeof logic === \"boolean\") {\n // Handle boolean input (true = AND, false = OR)\n this.afs.options.set(\"filterMode\", logic ? \"AND\" : \"OR\");\n } else {\n const mode = logic.toUpperCase();\n if ([\"OR\", \"AND\"].includes(mode)) {\n this.afs.options.set(\"filterMode\", mode);\n } else {\n this.afs.logger.warn(`Invalid filter mode: ${logic}`);\n return;\n }\n }\n\n this.afs.logger.debug(\n `Filter logic set to: ${this.afs.options.get(\"filterMode\")}`,\n );\n this.applyFilters();\n }\n\n /**\n * Clear all filters\n * @public\n */\n clearAllFilters() {\n this.afs.logger.debug(\"Clearing all filters\");\n\n // Reset filters\n this.activeFilters.clear();\n this.activeFilters.add(\"*\");\n\n // Reset filter buttons\n this.filterButtons.forEach((_, button) => {\n button.classList.remove(this.afs.options.get(\"activeClass\"));\n });\n\n // Reset filter groups\n this.filterGroups.clear();\n\n // Find and activate \"all\" button if exists\n const allButton = this.findAllButton();\n if (allButton) {\n allButton.classList.add(this.afs.options.get(\"activeClass\"));\n }\n\n // Clear sorting\n this.sortOrders.clear();\n\n // Apply changes and update UI\n this.applyFilters();\n this.afs.urlManager.updateURL();\n this.afs.emit(\"filtersCleared\");\n }\n\n /**\n * Bind filter event to button\n * @private\n * @param {HTMLElement} button - Filter button\n */\n bindFilterEvent(button) {\n this.afs.logger.debug(\"Binding filter event to button:\", button);\n\n button.addEventListener(\"click\", () => {\n const filterValue = this.filterButtons.get(button);\n\n if (!filterValue) return;\n\n if (filterValue === \"*\") {\n this.resetFilters();\n } else {\n this.toggleFilter(filterValue, button);\n }\n\n // Update the URL after filter change\n this.afs.urlManager.updateURL();\n });\n }\n\n /**\n * Reset filters to default state\n * @public\n */\n resetFilters() {\n this.afs.logger.debug(\"Resetting filters\");\n \n // Clear existing filters\n this.activeFilters.clear();\n \n // Reset button states\n this.filterButtons.forEach((_, button) => {\n button.classList.remove(this.afs.options.get(\"activeClass\"));\n });\n \n // Add \"*\" filter and activate \"all\" button\n this.activeFilters.add(\"*\");\n const allButton = this.findAllButton();\n if (allButton) {\n allButton.classList.add(this.afs.options.get(\"activeClass\"));\n }\n \n // Clear filter groups\n this.filterGroups.clear();\n \n // Force all items to be visible first\n const visibleItems = new Set(this.afs.items);\n this.afs.state.setState(\"items.visible\", visibleItems);\n \n // Show all items with animation\n this.afs.items.forEach(item => {\n item.classList.remove(this.afs.options.get('hiddenClass'));\n requestAnimationFrame(() => {\n this.animation.applyShowAnimation(item, this.afs.options.get(\"animationType\"));\n });\n });\n \n // Update counter after reset\n this.afs.updateCounter();\n \n // Update URL after reset\n this.afs.urlManager.updateURL();\n\n // Emit event\n this.afs.emit(\"filtersReset\");\n }\n\n /**\n * Find \"all\" filter button\n * @private\n * @returns {HTMLElement|null} All button\n */\n findAllButton() {\n for (const [button, value] of this.filterButtons.entries()) {\n if (value === \"*\") return button;\n }\n\n return null;\n }\n\n handleFilterClick(button) {\n const filterValue = button.dataset.filter;\n this.afs.logger.debug(\"Filter clicked:\", filterValue);\n\n if (filterValue === \"*\") {\n this.resetFilters();\n } else {\n this.toggleFilter(filterValue, button);\n }\n\n this.filter();\n\n // Call updateURL to reflect the new filter state in the URL\n this.updateURL();\n }\n\n /**\n * Toggle filter state\n * @private\n * @param {string} filterValue - Filter value\n * @param {HTMLElement} button - Filter button\n */\n toggleFilter(filterValue, button) {\n // Remove \"all\" filter\n this.activeFilters.delete(\"*\");\n const allButton = this.findAllButton();\n if (allButton) {\n allButton.classList.remove(this.afs.options.get(\"activeClass\"));\n }\n\n // Toggle filter\n if (button.classList.contains(this.afs.options.get(\"activeClass\"))) {\n button.classList.remove(this.afs.options.get(\"activeClass\"));\n this.activeFilters.delete(filterValue);\n\n // Reset to \"all\" if no filters active\n if (this.activeFilters.size === 0) {\n this.resetFilters();\n return;\n }\n } else {\n button.classList.add(this.afs.options.get(\"activeClass\"));\n this.activeFilters.add(filterValue);\n }\n\n this.applyFilters();\n\n // Emit event\n this.afs.emit(\"filterToggled\", {\n filter: filterValue,\n activeFilters: Array.from(this.activeFilters),\n });\n\n this.afs.logger.debug(\"Filter toggled:\", filterValue);\n }\n\n /**\n * Apply current filters\n * @public\n */\n applyFilters() {\n // Log active filters\n const activeFilters = Array.from(this.activeFilters);\n this.afs.logger.debug(\"Active filters:\", activeFilters);\n this.afs.logger.debug(\"Applying filters\");\n\n const previouslyVisible = new Set(this.afs.state.getState().items.visible);\n const visibleItems = new Set();\n\n // First pass: determine which items should be visible\n this.afs.items.forEach(item => {\n if (this.activeFilters.has(\"*\") || this.itemMatchesFilters(item)) {\n visibleItems.add(item);\n }\n });\n\n // Update state with determined visible items\n this.afs.state.setState(\"items.visible\", visibleItems);\n\n // Second pass: apply animations based on visibility changes\n this.afs.items.forEach(item => {\n if (visibleItems.has(item)) {\n // Remove hidden class first\n item.classList.remove(this.afs.options.get('hiddenClass'));\n // Then apply show animation in next frame\n requestAnimationFrame(() => {\n this.animation.applyShowAnimation(item, this.afs.options.get(\"animationType\"));\n });\n } else {\n // Apply hide animation\n requestAnimationFrame(() => {\n this.animation.applyHideAnimation(item, this.afs.options.get(\"animationType\"));\n });\n }\n });\n\n // Emit events and update UI\n this.emitFilterEvents(previouslyVisible, visibleItems);\n\n // Schedule UI updates\n requestAnimationFrame(() => {\n // Force reflow to ensure animations play\n this.afs.container.offsetHeight;\n\n // Update counter - this needs to happen after filter changes\n this.afs.updateCounter();\n \n // Update URL\n this.afs.urlManager.updateURL();\n\n // Emit final event\n this.afs.emit(\"filtersApplied\", {\n activeFilters,\n visibleItems: visibleItems.size,\n });\n });\n}\n\n /**\n * Check if item matches current filters\n * @private\n * @param {HTMLElement} item - DOM element\n * @returns {boolean} Whether item matches filters\n */\n itemMatchesFilters(item) {\n // Show all items if \"*\" is active\n if (this.activeFilters.has(\"*\")) {\n return true;\n }\n \n // Regular filter matching\n const itemCategories = new Set(item.dataset.categories?.split(\" \") || []);\n \n // If using filter groups\n if (this.filterGroups.size > 0) {\n return this.itemMatchesFilterGroups(itemCategories);\n }\n \n // Regular filtering\n return this.afs.options.get(\"filterMode\") === \"OR\"\n ? this.itemMatchesAnyFilter(itemCategories)\n : this.itemMatchesAllFilters(itemCategories);\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 itemMatchesAnyFilter(itemCategories) {\n return Array.from(this.activeFilters).some((filter) => {\n if (filter === \"*\") return true;\n return itemCategories.has(filter);\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 itemMatchesAllFilters(itemCategories) {\n return Array.from(this.activeFilters).every((filter) => {\n if (filter === \"*\") return true;\n return itemCategories.has(filter);\n });\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 groups\n */\n itemMatchesFilterGroups(itemCategories) {\n const groupMatches = Array.from(this.filterGroups.values()).map((group) => {\n if (group.filters.size === 0) return true;\n\n return group.operator === \"OR\"\n ? Array.from(group.filters).some((filter) => itemCategories.has(filter))\n : Array.from(group.filters).every((filter) =>\n itemCategories.has(filter),\n );\n });\n\n return this.afs.options.get(\"groupMode\") === \"OR\"\n ? groupMatches.some((matches) => matches)\n : groupMatches.every((matches) => matches);\n }\n\n /**\n * Emit filter-related events\n * @private\n * @param {Set} previouslyVisible - Previously visible items\n * @param {Set} nowVisible - Currently visible items\n */\n emitFilterEvents(previouslyVisible, nowVisible) {\n // Determine added and removed items\n const added = new Set(\n [...nowVisible].filter((item) => !previouslyVisible.has(item)),\n );\n const removed = new Set(\n [...previouslyVisible].filter((item) => !nowVisible.has(item)),\n );\n\n // Emit filter event\n this.afs.emit(\"filter\", {\n activeFilters: Array.from(this.activeFilters),\n visibleItems: nowVisible.size,\n added: added.size,\n removed: removed.size,\n });\n\n // Emit specific events for added/removed items\n if (added.size > 0) {\n this.afs.emit(\"itemsShown\", { items: added });\n }\n if (removed.size > 0) {\n this.afs.emit(\"itemsHidden\", { items: removed });\n }\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\n */\n addFilterGroup(groupId, filters, operator = \"OR\") {\n this.afs.logger.debug(`Adding filter group: ${groupId}`);\n\n if (!Array.isArray(filters)) {\n this.afs.logger.error(\"Filters must be an array\");\n return;\n }\n\n const validOperator = operator.toUpperCase();\n if (![\"AND\", \"OR\"].includes(validOperator)) {\n this.afs.logger.warn(`Invalid operator: ${operator}, defaulting to OR`);\n operator = \"OR\";\n }\n\n this.filterGroups.set(groupId, {\n filters: new Set(filters),\n operator: validOperator,\n });\n\n this.applyFilters();\n }\n\n /**\n * Remove a filter group\n * @public\n * @param {string} groupId - Group identifier\n */\n removeFilterGroup(groupId) {\n if (this.filterGroups.delete(groupId)) {\n this.afs.logger.debug(`Removed filter group: ${groupId}`);\n\n if (this.filterGroups.size === 0) {\n this.resetFilters();\n } else {\n this.applyFilters();\n }\n }\n }\n\n /**\n * Set filter group mode\n * @public\n * @param {string} mode - Mode for combining groups\n */\n setGroupMode(mode) {\n const validMode = mode.toUpperCase();\n if ([\"AND\", \"OR\"].includes(validMode)) {\n this.afs.options.set(\"groupMode\", validMode);\n this.afs.logger.debug(`Set group mode to: ${validMode}`);\n this.applyFilters();\n } else {\n this.afs.logger.warn(`Invalid group mode: ${mode}`);\n }\n }\n\n /**\n * Add filter manually\n * @public\n * @param {string} filter - Filter value\n */\n addFilter(filter) {\n this.afs.logger.debug(`Adding filter: ${filter}`);\n\n if (filter === \"*\") {\n this.resetFilters();\n return;\n }\n\n this.activeFilters.delete(\"*\");\n this.activeFilters.add(filter);\n\n // Update button states\n this.filterButtons.forEach((value, button) => {\n if (value === filter) {\n button.classList.add(this.afs.options.get(\"activeClass\"));\n } else if (value === \"*\") {\n button.classList.remove(this.afs.options.get(\"activeClass\"));\n }\n });\n\n this.applyFilters();\n }\n\n /**\n * Remove filter manually\n * @public\n * @param {string} filter - Filter value\n */\n removeFilter(filter) {\n this.afs.logger.debug(`Removing filter: ${filter}`);\n\n this.activeFilters.delete(filter);\n\n // Update button states\n this.filterButtons.forEach((value, button) => {\n if (value === filter) {\n button.classList.remove(this.afs.options.get(\"activeClass\"));\n }\n });\n\n // Reset to all if no filters active\n if (this.activeFilters.size === 0) {\n this.resetFilters();\n } else {\n this.applyFilters();\n }\n }\n\n /**\n * Set filter mode\n * @public\n * @param {string} mode - Filter mode ('AND' or 'OR')\n */\n setFilterMode(mode) {\n this.afs.logger.debug(`Setting filter mode to: ${mode}`);\n\n const validMode = mode.toUpperCase();\n if ([\"AND\", \"OR\"].includes(validMode)) {\n this.afs.options.set(\"filterMode\", validMode);\n this.afs.logger.debug(`Set filter mode to: ${validMode}`);\n this.applyFilters();\n } else {\n this.afs.logger.warn(`Invalid filter mode: ${mode}`);\n }\n }\n\n /**\n * Get active filters\n * @public\n * @returns {Set} Active filters\n */\n getActiveFilters() {\n return new Set(this.activeFilters);\n }\n\n /**\n * Get filter groups\n * @public\n * @returns {Map} Filter groups\n */\n getFilterGroups() {\n return new Map(this.filterGroups);\n }\n\n /**\n * Add filter button dynamically\n * @public\n * @param {HTMLElement} button - Button element\n * @param {string} filter - Filter value\n */\n addFilterButton(button, filter) {\n if (!filter) {\n this.afs.logger.warn(\"Filter value required for new filter button\");\n return;\n }\n\n this.filterButtons.set(button, filter);\n this.bindFilterEvent(button);\n this.afs.logger.debug(`Added filter button for: ${filter}`);\n }\n\n /**\n * Remove filter button\n * @public\n * @param {HTMLElement} button - Button to remove\n */\n removeFilter(filter) {\n this.afs.logger.debug(`Removing filter: ${filter}`);\n\n this.activeFilters.delete(filter);\n\n // Update button states\n this.filterButtons.forEach((value, button) => {\n if (value === filter) {\n button.classList.remove(this.afs.options.get(\"activeClass\"));\n }\n });\n\n // Reset to all if no filters active\n if (this.activeFilters.size === 0) {\n this.resetFilters();\n } else {\n this.applyFilters();\n }\n }\n\n /**\n * Sort items with automatic order detection\n * @public\n * @param {string} key - The data attribute key to sort by\n */\n sortWithOrder(key) {\n this.afs.logger.debug(`Sorting by ${key}`);\n\n try {\n const items = Array.from(this.afs.items);\n\n // Toggle sort order for the key\n const currentOrder = this.sortOrders.get(key) || \"asc\";\n const newOrder = currentOrder === \"asc\" ? \"desc\" : \"asc\";\n this.sortOrders.set(key, newOrder);\n\n // Determine sort type from first item\n const sortType = this.determineSortType(items[0], key);\n\n // Sort items\n items.sort((a, b) => {\n const valueA = this.getSortValue(a, key, sortType);\n const valueB = this.getSortValue(b, key, sortType);\n\n return this.compareValues(valueA, valueB, newOrder);\n });\n\n // Reorder DOM elements\n this.reorderItems(items);\n\n // Emit event\n this.afs.emit(\"sort\", { key, order: newOrder });\n\n this.afs.logger.info(`Sorted items by ${key} in ${newOrder} order`);\n\n return newOrder; // Return the new order for UI updates\n } catch (error) {\n this.afs.logger.error(\"Sort error:\", error);\n return null;\n }\n }\n\n /**\n * Shuffle items randomly\n * @public\n */\n shuffle() {\n this.afs.logger.debug(\"Shuffling items\");\n\n try {\n const items = Array.from(this.afs.items);\n\n // Fisher-Yates shuffle algorithm\n for (let i = items.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [items[i], items[j]] = [items[j], items[i]];\n }\n\n // Use the existing reorderItems method to update the DOM\n this.reorderItems(items);\n\n // Clear any existing sort orders as we've shuffled\n this.sortOrders.clear();\n\n this.afs.emit(\"shuffled\", {\n itemCount: items.length,\n });\n\n this.afs.logger.debug(\"Items shuffled successfully\");\n } catch (error) {\n this.afs.logger.error(\"Shuffle error:\", error);\n }\n }\n\n /**\n * Determine sort type from item value\n * @private\n * @param {HTMLElement} item - DOM element\n * @param {string} key - Sort key\n * @returns {string} Sort type ('number', 'date', or 'string')\n */\n determineSortType(item, key) {\n this.afs.logger.debug(`Determining sort type for ${key}`);\n\n const value = item.dataset[key];\n\n if (!value) return \"string\";\n if (!isNaN(value)) return \"number\";\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(value)) return \"date\";\n\n return \"string\";\n }\n\n /**\n * Get sort value from item\n * @private\n * @param {HTMLElement} item - DOM element\n * @param {string} key - Sort key\n * @param {string} type - Sort type\n * @returns {any} Parsed value for sorting\n */\n getSortValue(item, key, type) {\n const value = item.dataset[key];\n\n switch (type) {\n case \"number\":\n return parseFloat(value) || 0;\n case \"date\":\n return new Date(value).getTime() || 0;\n default:\n return (value || \"\").toLowerCase();\n }\n }\n\n /**\n * Compare two values for sorting\n * @private\n * @param {any} a - First value\n * @param {any} b - Second value\n * @param {string} order - Sort order ('asc' or 'desc')\n * @returns {number} Comparison result\n */\n compareValues(a, b, order) {\n // Handle null/undefined values\n if (a === null || a === undefined) return order === \"asc\" ? 1 : -1;\n if (b === null || b === undefined) return order === \"asc\" ? -1 : 1;\n\n // Compare values\n const comparison = a < b ? -1 : a > b ? 1 : 0;\n return order === \"asc\" ? comparison : -comparison;\n }\n\n /**\n * Reorder DOM elements\n * @private\n * @param {HTMLElement[]} items - Sorted items\n */\n reorderItems(items) {\n const fragment = document.createDocumentFragment();\n items.forEach((item) => fragment.appendChild(item));\n this.afs.container.appendChild(fragment);\n }\n\n /**\n * Get current sort order for key\n * @public\n * @param {string} key - Sort key\n * @returns {string} Current sort order ('asc' or 'desc')\n */\n getCurrentSortOrder(key) {\n return this.sortOrders.get(key) || \"asc\";\n }\n\n /**\n * Clear all sort orders\n * @public\n */\n clearSortOrders() {\n this.afs.logger.debug(\"Clearing all sort orders\");\n\n this.sortOrders.clear();\n this.afs.emit(\"sortCleared\");\n }\n\n /**\n * Clear all filters, url and search\n * @public\n */\n clearAllFilters() {\n this.afs.logger.debug(\"Clearing all filters and search\");\n\n // Reset filters\n this.activeFilters.clear();\n this.activeFilters.add(\"*\");\n\n // Update filter buttons\n this.filterButtons.forEach((_, button) => {\n button.classList.remove(this.afs.options.get(\"activeClass\"));\n });\n\n // Find and activate \"all\" button if exists\n const allButton = this.findAllButton();\n if (allButton) {\n allButton.classList.add(this.afs.options.get(\"activeClass\"));\n }\n\n // Clear checkboxes\n const checkboxes = document.querySelectorAll('input[type=\"checkbox\"]');\n checkboxes.forEach((checkbox) => {\n if (checkbox.classList.contains(this.afs.options.get(\"activeClass\"))) {\n checkbox.checked = false;\n checkbox.classList.remove(this.afs.options.get(\"activeClass\"));\n }\n });\n\n // Clear search\n if (this.afs.search) {\n this.afs.search.setValue(\"\");\n }\n\n // Clear filter groups and sort orders\n this.filterGroups.clear();\n this.sortOrders.clear();\n\n // Apply changes and ensure counter is updated\n this.applyFilters();\n \n // Update URL if URLManager exists\n if (this.afs.urlManager) {\n this.afs.urlManager.updateURL();\n }\n\n // Emit event\n this.afs.emit(\"filtersCleared\");\n\n this.afs.logger.info(\"All filters cleared\");\n }\n\n /**\n * Refresh the view\n * @public\n */\n refresh() {\n this.afs.logger.debug(\"Refreshing view\");\n\n this.applyFilters();\n this.afs.updateCounter();\n }\n\n removeFilterButton(button) {\n this.filterButtons.delete(button);\n button.removeEventListener(\"click\", this.handleFilterClick);\n }\n\n /**\n * Destroy instance\n * @public\n */\n destroy() {\n this.filterButtons.forEach((_, button) => {\n this.removeFilterButton(button);\n });\n this.filterButtons.clear();\n this.activeFilters.clear();\n this.filterGroups.clear();\n this.afs.logger.debug(\"Filter functionality destroyed\");\n }\n}\n","/**\n * @fileoverview Utility functions for AFS\n */\n\n/**\n * Debounce function\n * @param {Function} func - Function to debounce\n * @param {number} wait - Delay in milliseconds\n * @param {boolean} [immediate=false] - Execute immediately\n * @returns {Function} Debounced function\n */\nexport function debounce(func, wait, immediate = false) {\n let timeout;\n return function executedFunction(...args) {\n const context = this;\n const later = () => {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n const callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n }\n \n /**\n * Throttle function\n * @param {Function} func - Function to throttle\n * @param {number} limit - Time limit in milliseconds\n * @returns {Function} Throttled function\n */\n export function throttle(func, limit) {\n let inThrottle;\n return function executedFunction(...args) {\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => (inThrottle = false), limit);\n }\n };\n }\n \n /**\n * Parse date string according to format\n * @param {string} dateStr - Date string to parse\n * @param {string} format - Date format\n * @returns {Date|null} Parsed date object or null if invalid\n */\n export function parseDate(dateStr, format) {\n const formats = {\n 'YYYY-MM-DD': /^\\d{4}-\\d{2}-\\d{2}$/,\n 'DD-MM-YYYY': /^\\d{2}-\\d{2}-\\d{4}$/,\n 'MM/DD/YYYY': /^\\d{2}\\/\\d{2}\\/\\d{4}$/\n };\n \n try {\n if (formats[format]?.test(dateStr)) {\n const parts = dateStr.split(/[-\\/]/);\n switch (format) {\n case 'YYYY-MM-DD':\n return new Date(parts[0], parts[1] - 1, parts[2]);\n case 'DD-MM-YYYY':\n return new Date(parts[2], parts[1] - 1, parts[0]);\n case 'MM/DD/YYYY':\n return new Date(parts[2], parts[0] - 1, parts[1]);\n }\n }\n return new Date(dateStr);\n } catch {\n return null;\n }\n }\n \n /**\n * Get element's computed style value\n * @param {HTMLElement} element - Target element\n * @param {string} property - CSS property\n * @returns {string} Computed style value\n */\n export function getStyle(element, property) {\n return window.getComputedStyle(element).getPropertyValue(property);\n }\n \n /**\n * Check if element matches a selector\n * @param {HTMLElement} element - Element to check\n * @param {string} selector - CSS selector\n * @returns {boolean} Whether element matches selector\n */\n export function matches(element, selector) {\n return (\n element.matches ||\n element.matchesSelector ||\n element.msMatchesSelector ||\n element.mozMatchesSelector ||\n element.webkitMatchesSelector ||\n element.oMatchesSelector\n ).call(element, selector);\n }\n \n /**\n * Deep clone an object\n * @param {Object} obj - Object to clone\n * @returns {Object} Cloned object\n */\n export function deepClone(obj) {\n if (obj === null || typeof obj !== 'object') return obj;\n if (obj instanceof Date) return new Date(obj);\n if (obj instanceof Array) return obj.map(item => deepClone(item));\n if (obj instanceof Set) return new Set([...obj].map(item => deepClone(item)));\n if (obj instanceof Map) return new Map([...obj].map(([k, v]) => [deepClone(k), deepClone(v)]));\n \n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [key, deepClone(value)])\n );\n }\n \n /**\n * Generate unique ID\n * @param {string} [prefix=''] - ID prefix\n * @returns {string} Unique ID\n */\n export function uniqueId(prefix = '') {\n return `${prefix}${Math.random().toString(36).substr(2, 9)}`;\n }\n \n /**\n * Check if value is plain object\n * @param {any} value - Value to check\n * @returns {boolean} Whether value is plain object\n */\n export function isPlainObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n }","/**\n * @fileoverview Search functionality for AFS\n */\n\nimport { debounce } from '../utils';\n\nexport class Search {\n /**\n * @param {import('../AFS').AFS} afs - Main AFS instance\n */\n constructor(afs) {\n this.afs = afs;\n this.searchInput = null;\n this.searchKeys = ['title']; // Default search keys\n this.minSearchLength = 2;\n this.highlightClass = 'afs-highlight';\n this.setupSearch();\n }\n\n /**\n * Setup search functionality\n * @private\n */\n setupSearch() {\n const searchSelector = this.afs.options.get('searchInputSelector');\n if (!searchSelector) return;\n\n this.searchInput = document.querySelector(searchSelector);\n if (!this.searchInput) {\n this.afs.logger.warn(`Search input not found: ${searchSelector}`);\n return;\n }\n\n // Configure search\n this.searchKeys = this.afs.options.get('searchKeys') || this.searchKeys;\n this.minSearchLength = this.afs.options.get('minSearchLength') || this.minSearchLength;\n\n // Bind events\n this.bindSearchEvents();\n this.afs.logger.debug('Search functionality initialized');\n }\n\n /**\n * Bind search events\n * @private\n */\n bindSearchEvents() {\n if (!this.searchInput) return;\n\n // Create debounced search function\n const debouncedSearch = debounce((e) => {\n this.search(e.target.value);\n }, this.afs.options.get('debounceTime') || 300);\n\n // Bind input event\n this.searchInput.addEventListener('input', debouncedSearch);\n\n // Bind clear event\n this.searchInput.addEventListener('search', (e) => {\n if (!e.target.value) {\n this.clearSearch();\n }\n });\n\n // Handle Enter key\n this.searchInput.addEventListener('keypress', (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n this.search(e.target.value);\n }\n });\n }\n\n /**\n * Perform search\n * @public\n * @param {string} query - Search query\n */\n search(query) {\n this.afs.logger.debug('Performing search:', query);\n const normalizedQuery = this.normalizeQuery(query);\n\n // Update state\n this.afs.state.setState('search.query', normalizedQuery);\n let matches = 0;\n\n // Special case for empty query\n if (!normalizedQuery) {\n this.clearSearch();\n return;\n }\n\n // Skip if query is too short\n if (normalizedQuery.length < this.minSearchLength) {\n this.afs.logger.debug('Search query too short');\n return;\n }\n\n try {\n // Create search regex\n const regex = this.createSearchRegex(normalizedQuery);\n\n // Search through items\n this.afs.items.forEach(item => {\n const searchText = this.getItemSearchText(item);\n const matchesSearch = regex.test(searchText);\n\n if (matchesSearch) {\n this.afs.showItem(item);\n this.highlightMatches(item, regex);\n matches++;\n } else {\n this.afs.hideItem(item);\n this.removeHighlights(item);\n }\n });\n\n // Update URL and emit event\n this.afs.urlManager.updateURL();\n this.afs.emit('search', {\n query: normalizedQuery,\n matches,\n total: this.afs.items.length\n });\n\n this.afs.logger.info(`Search complete. Found ${matches} matches`);\n } catch (error) {\n this.afs.logger.error('Search error:', error);\n }\n\n // Update counter after animation\n setTimeout(() => {\n this.afs.updateCounter();\n }, this.afs.options.get('animationDuration'));\n }\n\n /**\n * Normalize search query\n * @private\n * @param {string} query - Raw search query\n * @returns {string} Normalized query\n */\n normalizeQuery(query) {\n return query\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, ' ');\n }\n\n /**\n * Create search regex\n * @private\n * @param {string} query - Normalized search query\n * @returns {RegExp} Search regex\n */\n createSearchRegex(query) {\n // Escape special regex characters\n const escapedQuery = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n \n // Split into words for whole word matching\n const words = escapedQuery.split(' ').filter(Boolean);\n \n // Create regex pattern\n const pattern = words\n .map(word => `(?=.*\\\\b${word})`)\n .join('');\n \n return new RegExp(pattern, 'i');\n }\n\n /**\n * Get searchable text from item\n * @private\n * @param {HTMLElement} item - DOM element\n * @returns {string} Searchable text\n */\n getItemSearchText(item) {\n return this.searchKeys\n .map(key => item.dataset[key] || '')\n .join(' ')\n .toLowerCase();\n }\n\n /**\n * Highlight search matches\n * @private\n * @param {HTMLElement} item - DOM element\n * @param {RegExp} regex - Search regex\n */\n highlightMatches(item, regex) {\n if (!this.afs.options.get('highlightMatches')) return;\n\n this.searchKeys.forEach(key => {\n const target = item.querySelector(`[data-search-key=\"${key}\"]`);\n if (!target) return;\n\n const text = target.textContent;\n const words = this.afs.state.getState().search.query.split(' ');\n\n let highlightedText = text;\n words.forEach(word => {\n if (!word) return;\n const wordRegex = new RegExp(`(${word})`, 'gi');\n highlightedText = highlightedText.replace(\n wordRegex,\n `<span class=\"${this.highlightClass}\">$1</span>`\n );\n });\n\n target.innerHTML = highlightedText;\n });\n }\n\n /**\n * Remove highlights\n * @private\n * @param {HTMLElement} item - DOM element\n */\n removeHighlights(item) {\n if (!this.afs.options.get('highlightMatches')) return;\n\n this.searchKeys.forEach(key => {\n const target = item.querySelector(`[data-search-key=\"${key}\"]`);\n if (!target) return;\n\n const highlights = target.querySelectorAll(`.${this.highlightClass}`);\n highlights.forEach(highlight => {\n const text = highlight.textContent;\n highlight.replaceWith(text);\n });\n });\n }\n\n /**\n * Clear search\n * @public\n */\n clearSearch() {\n this.afs.logger.debug('Clearing search');\n\n // Clear input\n if (this.searchInput) {\n this.searchInput.value = '';\n }\n\n // Clear state\n this.afs.state.setState('search.query', '');\n\n // Show all items\n this.afs.items.forEach(item => {\n this.afs.showItem(item);\n this.removeHighlights(item);\n });\n\n // Update URL and emit event\n this.afs.urlManager.updateURL();\n this.afs.emit('searchCleared');\n\n // Update counter\n setTimeout(() => {\n this.afs.updateCounter();\n }, this.afs.options.get('animationDuration'));\n }\n\n /**\n * Set search value\n * @public\n * @param {string} value - Search value\n */\n setValue(value) {\n if (this.searchInput) {\n this.searchInput.value = value;\n }\n this.search(value);\n }\n\n /**\n * Get current search value\n * @public\n * @returns {string} Current search value\n */\n getValue() {\n return this.afs.state.getState().search.query;\n }\n\n /**\n * Update search configuration\n * @public\n * @param {Object} config - Search configuration\n */\n updateConfig({\n searchKeys,\n minSearchLength,\n highlightClass,\n debounceTime\n } = {}) {\n if (searchKeys) this.searchKeys = searchKeys;\n if (minSearchLength) this.minSearchLength = minSearchLength;\n if (highlightClass) this.highlightClass = highlightClass;\n if (debounceTime) {\n this.bindSearchEvents(); // Rebind with new debounce time\n }\n }\n\n /**\n * Destroy search functionality\n * @public\n */\n destroy() {\n if (this.searchInput) {\n this.searchInput.removeEventListener('input', this.debouncedSearch);\n this.searchInput.removeEventListener('search', this.handleClear);\n this.searchInput.removeEventListener('keypress', this.handleEnter);\n }\n this.clearSearch();\n }\n}","/**\n * @fileoverview Sort functionality for AFS\n */\n\nexport class Sort {\n /**\n * @param {import('../AFS').AFS} afs - Main AFS instance\n */\n constructor(afs) {\n this.afs = afs;\n this.sortButtons = new Map();\n this.setupSort();\n }\n\n /**\n * Setup sort functionality\n * @private\n */\n setupSort() {\n const sortSelector = this.afs.options.get(\"sortButtonSelector\");\n if (!sortSelector) return;\n\n // Find and setup sort buttons\n document.querySelectorAll(sortSelector).forEach((button) => {\n const key = button.dataset.sortKey;\n if (!key) {\n this.afs.logger.warn(\n \"Sort button missing data-sort-key attribute:\",\n button,\n );\n return;\n }\n\n this.sortButtons.set(button, {\n key,\n direction: button.dataset.sortDirection || \"asc\",\n });\n\n this.bindSortEvent(button);\n });\n\n this.afs.logger.debug(\"Sort functionality initialized\");\n }\n\n /**\n * Bind sort event to button\n * @private\n * @param {HTMLElement} button - Sort button\n */\n bindSortEvent(button) {\n this.afs.logger.debug(\"Binding sort event to button:\", button);\n\n button.addEventListener(\"click\", () => {\n const sortData = this.sortButtons.get(button);\n if (!sortData) return;\n\n // Toggle direction\n sortData.direction = sortData.direction === \"asc\" ? \"desc\" : \"asc\";\n this.sortButtons.set(button, sortData);\n\n // Update button state\n this.updateSortButtonState(button, sortData);\n\n // Perform sort\n this.sort(sortData.key, sortData.direction);\n });\n }\n\n /**\n * Update sort button visual state\n * @private\n * @param {HTMLElement} button - Sort button\n * @param {Object} sortData - Sort data\n */\n updateSortButtonState(button, sortData) {\n // Remove active class from all buttons\n this.sortButtons.forEach((_, btn) => {\n btn.classList.remove(this.afs.options.get(\"activeSortClass\"));\n });\n\n // Add active class to current button\n button.classList.add(this.afs.options.get(\"activeSortClass\"));\n\n // Update direction indicator\n const indicator = button.querySelector(\".sort-direction\");\n if (indicator) {\n indicator.textContent = sortData.direction === \"asc\" ? \"↑\" : \"↓\";\n }\n }\n\n /**\n * Sort items\n * @public\n * @param {string} key - Sort key\n * @param {string} direction - Sort direction ('asc' or 'desc')\n */\n sort(key, direction = \"asc\") {\n this.afs.logger.debug(`Sorting by ${key} in ${direction} order`);\n\n try {\n // Update state\n this.afs.state.setState(\"sort.current\", { key, direction });\n\n // Get all items as array\n const items = Array.from(this.afs.items);\n\n // Determine sort type\n const sortType = this.determineSortType(items[0], key);\n\n // Sort items\n items.sort((a, b) => {\n const valueA = this.getSortValue(a, key, sortType);\n const valueB = this.getSortValue(b, key, sortType);\n\n return this.compareValues(valueA, valueB, direction);\n });\n\n // Reorder DOM elements\n this.reorderItems(items);\n\n // Update URL and emit event\n this.afs.urlManager.updateURL();\n this.afs.emit(\"sort\", { key, direction });\n\n this.afs.logger.info(`Sorted items by ${key} ${direction}`);\n } catch (error) {\n this.afs.logger.error(\"Sort error:\", error);\n }\n }\n\n /**\n * Determine sort type from first item\n * @private\n * @param {HTMLElement} item - First item\n * @param {string} key - Sort key\n * @returns {string} Sort type\n */\n determineSortType(item, key) {\n const value = item.dataset[key];\n\n if (!value) return \"string\";\n if (!isNaN(value)) return \"number\";\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(value)) return \"date\";\n\n return \"string\";\n }\n\n /**\n * Get sort value from item\n * @private\n * @param {HTMLElement} item - DOM element\n * @param {string} key - Sort key\n * @param {string} type - Sort type\n * @returns {any} Sort value\n */\n getSortValue(item, key, type) {\n const value = item.dataset[key];\n\n switch (type) {\n case \"number\":\n return parseFloat(value);\n case \"date\":\n return new Date(value).getTime();\n default:\n return value.toLowerCase();\n }\n }\n\n /**\n * Compare two values\n * @private\n * @param {any} a - First value\n * @param {any} b - Second value\n * @param {string} direction - Sort direction\n * @returns {number} Comparison result\n */\n compareValues(a, b, direction) {\n const modifier = direction === \"asc\" ? 1 : -1;\n\n if (a === b) return 0;\n if (a === undefined || a === null) return 1;\n if (b === undefined || b === null) return -1;\n\n return a > b ? modifier : -modifier;\n }\n\n /**\n * Reorder DOM elements\n * @private\n * @param {HTMLElement[]} items - Sorted items\n */\n reorderItems(items) {\n const container = this.afs.options.get(\"container\");\n const fragment = document.createDocumentFragment();\n\n items.forEach((item) => fragment.appendChild(item));\n container.appendChild(fragment);\n }\n /**\n * Sort with multiple criteria\n * @public\n * @param {Array<{key: string, direction: string}>} criteria - Sort criteria\n */\n sortMultiple(criteria) {\n this.afs.logger.debug(\"Sorting by multiple criteria:\", criteria);\n\n try {\n const items = Array.from(this.afs.items);\n\n items.sort((a, b) => {\n for (const { key, direction } of criteria) {\n const type = this.determineSortType(items[0], key);\n const valueA = this.getSortValue(a, key, type);\n const valueB = this.getSortValue(b, key, type);\n\n const comparison = this.compareValues(valueA, valueB, direction);\n if (comparison !== 0) return comparison;\n }\n return 0;\n });\n\n this.reorderItems(items);\n\n // Update state with primary sort\n if (criteria.length > 0) {\n this.afs.state.setState(\"sort.current\", criteria[0]);\n }\n\n this.afs.urlManager.updateURL();\n this.afs.emit(\"multiSort\", { criteria });\n } catch (error) {\n this.afs.logger.error(\"Multiple sort error:\", error);\n }\n }\n\n /**\n * Sort with custom comparator\n * @public\n * @param {string} key - Sort key\n * @param {Function} comparator - Custom comparison function\n */\n sortWithComparator(key, comparator) {\n this.afs.logger.debug(`Sorting by ${key} with custom comparator`);\n\n try {\n const items = Array.from(this.afs.items);\n\n items.sort((a, b) => {\n const valueA = a.dataset[key];\n const valueB = b.dataset[key];\n return comparator(valueA, valueB);\n });\n\n this.reorderItems(items);\n this.afs.emit(\"customSort\", { key, comparator });\n } catch (error) {\n this.afs.logger.error(\"Custom sort error:\", error);\n }\n }\n\n /**\n * Shuffle items randomly\n * @public\n */\n shuffle() {\n this.afs.logger.debug(\"Shuffling items\");\n\n try {\n const items = Array.from(this.afs.items);\n\n // Fisher-Yates shuffle algorithm\n for (let i = items.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [items[i], items[j]] = [items[j], items[i]];\n }\n\n this.reorderItems(items);\n\n // Clear current sort state\n this.afs.state.setState(\"sort.current\", null);\n\n // Update UI\n this.sortButtons.forEach((_, button) => {\n button.classList.remove(this.afs.options.get(\"activeSortClass\"));\n const indicator = button.querySelector(\".sort-direction\");\n if (indicator) indicator.textContent = \"\";\n });\n\n this.afs.urlManager.updateURL();\n this.afs.emit(\"shuffle\");\n } catch (error) {\n this.afs.logger.error(\"Shuffle error:\", error);\n }\n }\n\n /**\n * Reset sort to default state\n * @public\n */\n reset() {\n this.afs.logger.debug(\"Resetting sort\");\n\n // Clear sort state\n this.afs.state.setState(\"sort.current\", null);\n\n // Reset UI\n this.sortButtons.forEach((_, button) => {\n button.classList.remove(this.afs.options.get(\"activeSortClass\"));\n const indicator = button.querySelector(\".sort-direction\");\n if (indicator) indicator.textContent = \"\";\n });\n\n // Reset sort data\n this.sortButtons.forEach((data, button) => {\n data.direction = \"asc\";\n this.sortButtons.set(button, data);\n });\n\n this.afs.urlManager.updateURL();\n this.afs.emit(\"sortReset\");\n }\n\n /**\n * Get current sort state\n * @public\n * @returns {Object|null} Current sort state\n */\n getCurrentSort() {\n return this.afs.state.getState().sort.current;\n }\n\n /**\n * Add sort button dynamically\n * @public\n * @param {HTMLElement} button - Sort button element\n * @param {string} key - Sort key\n * @param {string} [direction='asc'] - Initial sort direction\n */\n addSortButton(button, key, direction = \"asc\") {\n if (!key) {\n this.afs.logger.warn(\"Sort key required for new sort button\");\n return;\n }\n\n this.sortButtons.set(button, { key, direction });\n this.bindSortEvent(button);\n this.afs.logger.debug(`Added sort button for ${key}`);\n }\n\n /**\n * Remove sort button\n * @public\n * @param {HTMLElement} button - Sort button to remove\n */\n removeSortButton(button) {\n if (this.sortButtons.has(button)) {\n button.removeEventListener(\"click\", this.bindSortEvent);\n this.sortButtons.delete(button);\n this.afs.logger.debug(\"Removed sort button\");\n }\n }\n\n /**\n * Destroy sort functionality\n * @public\n */\n destroy() {\n this.sortButtons.forEach((_, button) => {\n this.removeSortButton(button);\n });\n this.sortButtons.clear();\n this.afs.logger.debug(\"Sort functionality destroyed\");\n }\n}\n","/**\n * @fileoverview Pagination functionality for AFS\n */\nimport { Animation } from \"../styles/Animation.js\";\n\nexport class Pagination {\n /**\n * @param {import('../AFS').AFS} afs - Main AFS instance\n */\n constructor(afs) {\n this.afs = afs;\n this.container = null;\n this.animation = new Animation(afs);\n this.options = this.afs.options.get(\"pagination\");\n this.setupPagination();\n }\n\n /**\n * Setup pagination\n * @private\n */\n setupPagination() {\n this.afs.logger.debug(\"Setting up pagination\");\n if (!this.afs.options.get('pagination.enabled')) return;\n console.log('Pagination enabled');\n\n this.container = document.createElement(\"div\");\n this.container.className = this.options.containerClass;\n\n const itemsContainer = document.querySelector(\n this.afs.options.get(\"pagination.container\"),\n );\n if (!itemsContainer) {\n this.afs.logger.error(\"Items container not found.\");\n return;\n }\n itemsContainer.appendChild(this.container);\n\n // Initialize pagination state with defaults\n this.afs.state.setState(\"pagination\", {\n currentPage: 1,\n itemsPerPage: this.options.itemsPerPage,\n totalPages: 0,\n });\n\n this.bindEvents();\n this.update();\n this.afs.logger.debug(\"Pagination initialized\");\n }\n\n /**\n * Bind pagination events\n * @private\n */\n bindEvents() {\n this.afs.on(\"filter\", () => this.update());\n this.afs.on(\"search\", () => this.update());\n this.afs.on(\"sort\", () => this.update());\n\n this.container.addEventListener(\"click\", (e) => {\n const button = e.target.closest(\"button\");\n if (!button) return;\n\n const page = button.dataset.page;\n if (page) {\n this.goToPage(parseInt(page, 10));\n }\n });\n }\n\n /**\n * Update pagination\n * @public\n */\n update() {\n const visibleItems = Array.from(this.afs.state.getState().items.visible);\n const itemsPerPage = this.afs.state.getState().pagination.itemsPerPage;\n const totalPages = Math.max(\n 1,\n Math.ceil(visibleItems.length / itemsPerPage),\n );\n\n // Update state\n const currentState = this.afs.state.getState().pagination;\n let currentPage = currentState.currentPage;\n\n // Adjust current page if it's beyond the total pages\n if (currentPage > totalPages) {\n currentPage = totalPages;\n }\n\n // Update pagination state\n this.afs.state.setState(\"pagination\", {\n ...currentState,\n currentPage,\n totalPages,\n });\n\n // Update visibility before rendering pagination controls\n this.updateVisibility(visibleItems);\n this.renderPagination();\n this.afs.urlManager.updateURL();\n\n this.afs.emit(\"pagination\", {\n currentPage,\n totalPages,\n itemsPerPage,\n visibleItems: visibleItems.length,\n });\n }\n\n /**\n * Update items visibility based on current page\n * @private\n */\n updateVisibility(visibleItems) {\n const { currentPage, itemsPerPage } = this.afs.state.getState().pagination;\n const startIndex = (currentPage - 1) * itemsPerPage;\n const endIndex = startIndex + itemsPerPage;\n\n // First hide all items\n this.afs.items.forEach((item) => {\n item.style.display = \"none\";\n item.classList.add(this.afs.options.get(\"hiddenClass\"));\n });\n\n // Then show only the items for the current page\n const itemsToShow = visibleItems.slice(startIndex, endIndex);\n\n // Ensure we're not trying to display non-existent items\n if (itemsToShow.length === 0 && visibleItems.length > 0) {\n // If we have no items to show but we do have visible items,\n // we're probably on an invalid page - go to page 1\n this.goToPage(1);\n return;\n }\n\n // Show items with animation\n requestAnimationFrame(() => {\n itemsToShow.forEach((item) => {\n // Remove hidden class and restore display\n item.style.display = \"\";\n item.classList.remove(this.afs.options.get(\"hiddenClass\"));\n\n // Apply show animation in the next frame\n requestAnimationFrame(() => {\n this.animation.applyShowAnimation(\n item,\n this.options.animationType || \"fade\",\n );\n });\n });\n });\n }\n\n /**\n * Render pagination controls\n * @private\n */\n renderPagination() {\n const { currentPage, totalPages } = this.afs.state.getState().pagination;\n\n this.container.innerHTML = \"\";\n\n if (totalPages <= 1) {\n this.container.style.display = \"none\";\n return;\n }\n\n this.container.style.display = \"flex\";\n const controls = this.createPaginationControls(currentPage, totalPages);\n this.container.appendChild(controls);\n }\n\n /**\n * Create pagination controls\n * @private\n * @param {number} currentPage - Current page\n * @param {number} totalPages - Total pages\n * @returns {DocumentFragment} Pagination controls\n */\n createPaginationControls(currentPage, totalPages) {\n const fragment = document.createDocumentFragment();\n\n if (this.options.showPrevNext) {\n const prevButton = this.createPageButton(\"‹\", currentPage - 1, {\n disabled: currentPage === 1,\n class: \"afs-pagination-prev\",\n });\n fragment.appendChild(prevButton);\n }\n\n fragment.appendChild(\n this.createPageButton(\"1\", 1, { active: currentPage === 1 }),\n );\n\n const range = this.calculatePageRange(currentPage, totalPages);\n\n if (range.start > 2) fragment.appendChild(this.createEllipsis());\n\n for (let i = range.start; i <= range.end; i++) {\n if (i === 1 || i === totalPages) continue;\n fragment.appendChild(\n this.createPageButton(i.toString(), i, { active: currentPage === i }),\n );\n }\n\n if (range.end < totalPages - 1) fragment.appendChild(this.createEllipsis());\n\n if (totalPages > 1)\n fragment.appendChild(\n this.createPageButton(totalPages.toString(), totalPages, {\n active: currentPage === totalPages,\n }),\n );\n\n if (this.options.showPrevNext) {\n const nextButton = this.createPageButton(\"›\", currentPage + 1, {\n disabled: currentPage === totalPages,\n class: \"afs-pagination-next\",\n });\n fragment.appendChild(nextButton);\n }\n\n return fragment;\n }\n\n /**\n * Create page button\n * @private\n */\n createPageButton(\n text,\n page,\n { active = false, disabled = false, class: className = \"\" } = {},\n ) {\n const button = document.createElement(\"button\");\n button.textContent = text;\n button.dataset.page = page;\n button.classList.add(this.options.pageButtonClass || \"afs-page-button\");\n\n if (className) button.classList.add(className);\n if (active)\n button.classList.add(this.options.activePageClass || \"afs-page-active\");\n if (disabled) button.disabled = true;\n\n return button;\n }\n\n createEllipsis() {\n const span = document.createElement(\"span\");\n span.textContent = \"...\";\n span.classList.add(\"afs-pagination-ellipsis\");\n return span;\n }\n\n calculatePageRange(currentPage, totalPages) {\n const maxButtons = this.options.maxButtons || 7;\n const sideButtons = Math.floor((maxButtons - 3) / 2);\n\n let start = Math.max(2, currentPage - sideButtons);\n let end = Math.min(totalPages - 1, start + maxButtons - 3);\n\n if (end - start < maxButtons - 3)\n start = Math.max(2, end - (maxButtons - 3));\n\n return { start, end };\n }\n\n /**\n * Go to specific page\n * @public\n */\n goToPage(page) {\n const state = this.afs.state.getState().pagination;\n const targetPage = Math.max(1, Math.min(page, state.totalPages));\n\n if (targetPage === state.currentPage) return;\n\n // Update state\n this.afs.state.setState(\"pagination.currentPage\", targetPage);\n\n // Force a reflow before updating\n this.afs.container.offsetHeight;\n\n // Update visibility and controls\n this.update();\n\n // Scroll to top if enabled\n if (this.options.scrollToTop) {\n setTimeout(() => this.scrollToTop(), 100);\n }\n\n // Emit page change event\n this.afs.emit(\"pageChanged\", {\n previousPage: state.currentPage,\n currentPage: targetPage,\n totalPages: state.totalPages,\n });\n }\n\n scrollToTop() {\n const container = document.querySelector(\n this.afs.options.get(\"pagination.container\"),\n );\n if (!container) {\n this.afs.logger.warn(\"Scroll container not found.\");\n return;\n }\n\n window.scrollTo({\n top: container.offsetTop - this.options.scrollOffset,\n behavior: \"smooth\",\n });\n }\n\n /**\n * Set pagination mode\n * @public\n */\n setPaginationMode(enabled) {\n this.afs.logger.debug(`Setting pagination mode to: ${enabled}`);\n \n // Update options\n this.afs.options.set('pagination.enabled', enabled);\n \n if (enabled) {\n // Enable pagination\n this.setupPagination();\n } else {\n // Disable pagination and show all items\n this.container.remove();\n this.showAllItems();\n }\n\n // Emit event\n this.afs.emit('paginationModeChanged', { enabled });\n }\n\n /**\n * Show all items (for infinite scroll mode)\n * @private\n */\n showAllItems() {\n const visibleItems = Array.from(this.afs.state.getState().items.visible);\n \n requestAnimationFrame(() => {\n visibleItems.forEach(item => {\n item.style.display = '';\n item.classList.remove(this.afs.options.get('hiddenClass'));\n \n requestAnimationFrame(() => {\n this.animation.applyShowAnimation(item, this.options.animationType || 'fade');\n });\n });\n });\n }\n}\n","/**\n * @fileoverview URL state management for AFS\n */\n\nexport class URLManager {\n /**\n * @param {import('../AFS').AFS} afs - Main AFS instance\n */\n constructor(afs) {\n this.afs = afs;\n this.defaultParams = new URLSearchParams();\n this.setupPopStateHandler();\n \n // Load URL state after a small delay to ensure all features are ready\n setTimeout(() => {\n this.loadFromURL();\n }, 0);\n }\n\n /**\n * Setup history popstate handler\n * @private\n */\n setupPopStateHandler() {\n window.addEventListener('popstate', () => {\n this.loadFromURL();\n });\n }\n\n /**\n * Update URL with current filter state\n * @public\n */\n /**\n * Update URL with current filter state\n * @public\n */\nupdateURL() {\n this.afs.logger.debug(\"Updating URL state\");\n const params = new URLSearchParams();\n const state = this.afs.state.getState(); // Get current state of filters\n\n // Get active filters directly from the Filter instance\n const activeFilters = this.afs.filter.getActiveFilters();\n\n // Update the state object with the active filters\n state.filters.current = activeFilters;\n\n // Add filters to URL\n this.addFiltersToURL(params, state);\n \n // Add ranges (if applicable) to URL\n this.addRangesToURL(params, state);\n \n // Add search query to URL\n this.addSearchToURL(params, state);\n \n // Add sort state to URL\n this.addSortToURL(params, state);\n \n // Add pagination to URL\n this.addPaginationToURL(params, state);\n \n // Push the updated URL\n this.pushState(params); // Push the new URL state to the browser\n}\n\n /**\n * Add filters to URL parameters\n * @private\n * @param {URLSearchParams} params\n * @param {Object} state\n */\n addFiltersToURL(params, state) {\n const filters = state.filters;\n\n // Skip if only default filter is active\n if (filters.current.size === 0 || \n (filters.current.size === 1 && filters.current.has('*'))) {\n return;\n }\n\n // Group filters by type\n const filtersByType = {};\n for (const filter of filters.current) {\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 filters to params\n Object.entries(filtersByType).forEach(([type, values]) => {\n params.set(type, Array.from(values).join(','));\n });\n\n // Add filter mode if not default\n if (filters.mode !== 'OR') {\n params.set('filterMode', filters.mode.toLowerCase());\n }\n\n // Add group mode if groups exist and mode isn't default\n if (filters.groups.size > 0 && filters.groupMode !== 'OR') {\n params.set('groupMode', filters.groupMode.toLowerCase());\n }\n\n // Add filter groups if they exist\n filters.groups.forEach((group, groupId) => {\n params.set(`group_${groupId}`, Array.from(group.filters).join(','));\n if (group.operator !== 'OR') {\n params.set(`groupOp_${groupId}`, group.operator.toLowerCase());\n }\n });\n }\n\n /**\n * Add range filters to URL parameters\n * @private\n * @param {URLSearchParams} params\n * @param {Object} state\n */\n addRangesToURL(params, state) {\n // Handle numeric ranges\n state.filters.ranges.forEach((range, key) => {\n const { currentMin, currentMax } = range;\n if (currentMin !== range.min || currentMax !== range.max) {\n params.set(`range_${key}`, `${currentMin},${currentMax}`);\n }\n });\n\n // Handle date ranges\n state.filters.dateRanges.forEach((range, key) => {\n const { start, end } = range;\n params.set(`dateRange_${key}`, `${start.toISOString()},${end.toISOString()}`);\n });\n }\n\n /**\n * Add search parameters to URL\n * @private\n * @param {URLSearchParams} params\n * @param {Object} state\n */\n addSearchToURL(params, state) {\n if (state.search.query) {\n params.set('search', state.search.query);\n }\n }\n\n /**\n * Add sort parameters to URL\n * @private\n * @param {URLSearchParams} params\n * @param {Object} state\n */\n addSortToURL(params, state) {\n if (state.sort.current) {\n const { key, direction } = state.sort.current;\n params.set('sort', `${key},${direction}`);\n }\n }\n\n /**\n * Add pagination parameters to URL\n * @private\n * @param {URLSearchParams} params\n * @param {Object} state\n */\n addPaginationToURL(params, state) {\n const { currentPage, itemsPerPage } = state.pagination;\n if (currentPage > 1) {\n params.set('page', currentPage.toString());\n }\n if (itemsPerPage !== this.afs.options.get('pagination.itemsPerPage')) {\n params.set('perPage', itemsPerPage.toString());\n }\n }\n\n /**\n * Update browser URL\n * @private\n * @param {URLSearchParams} params\n */\n pushState(params) {\n const queryString = params.toString();\n const newURL = `${window.location.pathname}${queryString ? '?' + queryString : ''}`;\n \n // Only update if URL actually changed\n if (newURL !== window.location.href) {\n window.history.pushState({}, '', newURL);\n this.afs.logger.debug('URL updated:', newURL);\n }\n }\n\n /**\n * Load filter state from URL\n * @public\n */\nloadFromURL() {\n this.afs.logger.debug('Loading state from URL');\n const params = new URLSearchParams(window.location.search);\n\n try {\n // Clear existing state first\n if (this.afs.filter) {\n this.afs.filter.clearAllFilters();\n }\n\n // Process filter mode first\n const filterMode = params.get('filterMode');\n if (filterMode && this.afs.filter) {\n this.afs.filter.setFilterMode(filterMode.toUpperCase());\n }\n\n // Process regular filters\n const filterParams = Array.from(params.entries()).filter(([key]) => this.isRegularFilter(key));\n if (filterParams.length > 0 && this.afs.filter) {\n // Remove default '*' filter\n this.afs.filter.activeFilters.clear();\n \n // Add filters and update button states\n filterParams.forEach(([type, values]) => {\n values.split(',').forEach(value => {\n const filter = `${type}:${value}`;\n this.afs.filter.activeFilters.add(filter);\n \n // Update button UI\n this.afs.filter.filterButtons.forEach((buttonFilter, button) => {\n if (buttonFilter === filter) {\n button.classList.add(this.afs.options.get('activeClass'));\n } else if (buttonFilter === '*') {\n button.classList.remove(this.afs.options.get('activeClass'));\n }\n });\n });\n });\n }\n\n // Apply filters before processing other parameters\n if (this.afs.filter) {\n this.afs.filter.applyFilters();\n }\n\n // Process search\n const searchQuery = params.get('search');\n if (searchQuery && this.afs.search) {\n this.afs.search.setValue(searchQuery);\n }\n\n // Process sort\n const sortParam = params.get('sort');\n if (sortParam && this.afs.sort) {\n const [key, direction] = sortParam.split(',');\n this.afs.sort.sort(key, direction);\n }\n\n // Process pagination\n const page = parseInt(params.get('page'));\n if (!isNaN(page) && this.afs.pagination) {\n this.afs.pagination.goToPage(page);\n }\n\n this.afs.emit('urlStateLoaded', { params: Object.fromEntries(params) });\n this.afs.logger.info('State loaded from URL');\n } catch (error) {\n this.afs.logger.error('Error loading state from URL:', error);\n // Reset to default state on error\n if (this.afs.filter) {\n this.afs.filter.clearAllFilters();\n }\n }\n}\n \n /**\n * Process filters from URL parameters\n * @private\n * @param {URLSearchParams} params\n */\n processFiltersFromURL(params) {\n const state = this.afs.state.getState();\n let hasFilters = false;\n\n // Process filter mode\n const filterMode = params.get('filterMode');\n if (filterMode) {\n state.filters.mode = filterMode.toUpperCase();\n }\n\n // Process group mode\n const groupMode = params.get('groupMode');\n if (groupMode) {\n state.filters.groupMode = groupMode.toUpperCase();\n }\n\n // Process regular filters\n for (const [type, values] of params.entries()) {\n if (this.isRegularFilter(type)) {\n values.split(',').filter(Boolean).forEach(value => {\n hasFilters = true;\n state.filters.current.add(`${type}:${value}`);\n });\n }\n }\n\n // Process filter groups\n for (const [key, value] of params.entries()) {\n if (key.startsWith('group_')) {\n const groupId = key.replace('group_', '');\n const operator = params.get(`groupOp_${groupId}`)?.toUpperCase() || 'OR';\n state.filters.groups.set(groupId, {\n filters: new Set(value.split(',')),\n operator\n });\n }\n }\n\n // Set default if no filters\n if (!hasFilters && state.filters.groups.size === 0) {\n state.filters.current.add('*');\n }\n }\n\n /**\n * Process range filters from URL parameters\n * @private\n * @param {URLSearchParams} params\n */\n processRangesFromURL(params) {\n const state = this.afs.state.getState();\n\n // Process numeric ranges\n for (const [key, value] of params.entries()) {\n if (key.startsWith('range_')) {\n const rangeKey = key.replace('range_', '');\n const [min, max] = value.split(',').map(Number);\n state.filters.ranges.set(rangeKey, { currentMin: min, currentMax: max });\n }\n }\n\n // Process date ranges\n for (const [key, value] of params.entries()) {\n if (key.startsWith('dateRange_')) {\n const rangeKey = key.replace('dateRange_', '');\n const [start, end] = value.split(',').map(str => new Date(str));\n state.filters.dateRanges.set(rangeKey, { start, end });\n }\n }\n }\n\n /**\n * Process search from URL parameters\n * @private\n * @param {URLSearchParams} params\n */\n processSearchFromURL(params) {\n const searchQuery = params.get('search') || '';\n this.afs.state.setState('search.query', searchQuery);\n \n if (this.afs.options.get('searchInput')) {\n this.afs.options.get('searchInput').value = searchQuery;\n }\n }\n\n /**\n * Process sort from URL parameters\n * @private\n * @param {URLSearchParams} params\n */\n processSortFromURL(params) {\n const sortParam = params.get('sort');\n if (sortParam) {\n const [key, direction] = sortParam.split(',');\n this.afs.state.setState('sort.current', { key, direction });\n }\n }\n\n /**\n * Process pagination from URL parameters\n * @private\n * @param {URLSearchParams} params\n */\n processPaginationFromURL(params) {\n const page = parseInt(params.get('page')) || 1;\n const perPage = parseInt(params.get('perPage')) || \n this.afs.options.get('pagination.itemsPerPage');\n\n this.afs.state.setState('pagination', {\n currentPage: page,\n itemsPerPage: perPage\n });\n }\n\n /**\n * Check if parameter is a regular filter\n * @private\n * @param {string} param - Parameter name\n * @returns {boolean}\n */\n isRegularFilter(param) {\n const excludedParams = [\n 'search', 'sort', 'page', 'perPage', 'filterMode', 'groupMode'\n ];\n return !excludedParams.includes(param) && \n !param.startsWith('group_') && \n !param.startsWith('groupOp_') && \n !param.startsWith('range_') && \n !param.startsWith('dateRange_');\n }\n\n /**\n * Clear URL parameters\n * @public\n */\n clearURL() {\n window.history.pushState({}, '', window.location.pathname);\n this.afs.state.reset();\n if (this.afs.filter) {\n this.afs.filter.clearAllFilters();\n }\n }\n\n /**\n * Get current URL parameters\n * @public\n * @returns {URLSearchParams}\n */\n getURLParams() {\n return new URLSearchParams(window.location.search);\n }\n\n /**\n * Check if URL has parameters\n * @public\n * @returns {boolean}\n */\n hasParams() {\n return window.location.search.length > 1;\n }\n\n /**\n * Get parameter value\n * @public\n * @param {string} param - Parameter name\n * @returns {string|null}\n */\n getParam(param) {\n return new URLSearchParams(window.location.search).get(param);\n }\n}","/**\n * @fileoverview Range filter implementation for AFS\n */\n\nimport { debounce } from \"../utils\";\nimport { StyleManager } from \"../styles/StyleManager\";\n\nexport class RangeFilter {\n constructor(afs) {\n this.afs = afs;\n this.activeRanges = new Map();\n\n if (!this.afs.styleManager) {\n this.afs.styleManager = new StyleManager(this.afs.options);\n }\n\n // Apply styles immediately\n this.afs.styleManager.applyStyles();\n }\n\n /**\n * @typedef {Object} RangeOptions\n * @property {string} key - Data attribute key\n * @property {string} type - Type of range ('number' or 'date')\n * @property {HTMLElement} container - Container element\n * @property {number|string} [min] - Minimum value\n * @property {number|string} [max] - Maximum value\n * @property {number} [step] - Step value\n */\n\n /**\n * Add range slider\n * @param {RangeOptions} options - Range slider options\n */\n addRangeSlider({ key, type, container, min, max, step = 1, ui }) {\n this.afs.logger.debug(`Adding range slider for ${key}`);\n\n if (!container) {\n this.afs.logger.error(\"Container element required for range slider\");\n return;\n }\n\n // Calculate min/max if not provided\n const values = this.calculateMinMax(key, type);\n min = min ?? values.min;\n max = max ?? values.max;\n\n // Get global UI options and merge with slider-specific options\n const globalUiOptions = this.afs.options.get(\"styles.slider.ui\") || {\n showHistogram: false,\n bins: 10,\n };\n const sliderUiOptions = {\n ...globalUiOptions,\n ...ui, // Override with slider-specific options if provided\n };\n\n // Only calculate histogram data if enabled\n const histogramData = sliderUiOptions.showHistogram\n ? this.calculateHistogramData(key, sliderUiOptions.bins)\n : { counts: [], binEdges: [], max: 0 };\n\n // Create slider elements\n const elements = this.createSliderElements(histogramData, sliderUiOptions);\n const state = this.initializeState(min, max, step, type);\n\n // Store histogram data and UI options in state\n state.ui = sliderUiOptions;\n if (sliderUiOptions.showHistogram) {\n state.histogram = histogramData;\n }\n\n // Add elements to container\n this.appendElements(container, elements);\n\n // Setup event handlers\n this.setupEventHandlers(elements, state, key);\n\n // Store state\n this.activeRanges.set(key, { state, elements });\n\n // Initial update\n this.updateSliderUI(key);\n\n // Setup histogram highlight updates only if enabled\n if (sliderUiOptions.showHistogram) {\n this.setupHistogramHighlight(elements, state, histogramData.binEdges);\n }\n\n this.afs.logger.info(`Range slider added for ${key}`);\n }\n /**\n * Calculate min and max values from items\n * @private\n */\n calculateMinMax(key, type) {\n const values = Array.from(this.afs.items)\n .map((item) => {\n const value = item.dataset[key];\n return type === \"date\" ? new Date(value).getTime() : parseFloat(value);\n })\n .filter((value) => !isNaN(value));\n\n return {\n min: Math.min(...values),\n max: Math.max(...values),\n };\n }\n\n /**\n * Create slider DOM elements\n * @private\n * @param {Object} histogramData - Histogram data\n * @param {Object} sliderUiOptions - UI options for this slider\n */\n createSliderElements(histogramData, sliderUiOptions) {\n const styles =\n this.afs.options.get(\"styles\") || this.afs.styleManager.defaultStyles;\n const sliderStyles =\n styles.slider || this.afs.styleManager.defaultStyles.slider;\n const colors = styles.colors || this.afs.styleManager.defaultStyles.colors;\n\n const container = document.createElement(\"div\");\n container.className = \"price-range-container\";\n\n const slider = document.createElement(\"div\");\n slider.className = sliderStyles.class;\n\n const track = document.createElement(\"div\");\n track.className = sliderStyles.trackClass;\n\n // Only add histogram if enabled in the slider-specific options\n if (sliderUiOptions?.showHistogram && histogramData?.counts?.length > 0) {\n const histogram = this.createHistogramBars(histogramData, colors);\n slider.appendChild(histogram);\n }\n\n const selectedRange = document.createElement(\"div\");\n selectedRange.className = sliderStyles.selectedClass;\n\n const minThumb = document.createElement(\"div\");\n minThumb.className = sliderStyles.thumbClass;\n\n const maxThumb = document.createElement(\"div\");\n maxThumb.className = sliderStyles.thumbClass;\n\n const minValue = document.createElement(\"div\");\n minValue.className = sliderStyles.valueClass;\n\n const maxValue = document.createElement(\"div\");\n maxValue.className = sliderStyles.valueClass;\n\n // Build the slider\n slider.appendChild(track);\n slider.appendChild(selectedRange);\n slider.appendChild(minThumb);\n slider.appendChild(maxThumb);\n slider.appendChild(minValue);\n slider.appendChild(maxValue);\n\n container.appendChild(slider);\n\n return {\n container,\n slider,\n track,\n selectedRange,\n minThumb,\n maxThumb,\n minValue,\n maxValue,\n };\n }\n\n // Add helper method for creating histogram\n createHistogram(data, colors) {\n const histogram = document.createElement(\"div\");\n histogram.className = \"afs-histogram\";\n\n // Create histogram bars\n data.forEach((value, index) => {\n const bar = document.createElement(\"div\");\n bar.className = \"afs-histogram-bar\";\n bar.style.height = `${value}%`;\n bar.style.backgroundColor = colors.histogram;\n histogram.appendChild(bar);\n });\n\n return histogram;\n }\n\n /**\n * Calculate histogram data from items\n * @private\n * @param {string} key - Data attribute key (e.g., 'price')\n * @param {number} [bins=10] - Number of bins for histogram\n * @returns {Object} Histogram data and metadata\n */\n calculateHistogramData(key, bins = 10) {\n try {\n const values = Array.from(this.afs.items)\n .map((item) => parseFloat(item.dataset[key]))\n .filter((value) => !isNaN(value));\n\n if (values.length === 0) {\n return { counts: [], binEdges: [], max: 0 };\n }\n\n const min = Math.min(...values);\n const max = Math.max(...values);\n const binWidth = (max - min) / bins;\n\n const counts = new Array(bins).fill(0);\n const binEdges = new Array(bins + 1);\n\n // Calculate bin edges\n for (let i = 0; i <= bins; i++) {\n binEdges[i] = min + i * binWidth;\n }\n\n // Count values in each bin\n values.forEach((value) => {\n if (value === max) {\n counts[counts.length - 1]++;\n return;\n }\n\n const binIndex = Math.floor((value - min) / binWidth);\n counts[binIndex]++;\n });\n\n // Normalize heights to be more subtle\n const maxCount = Math.max(...counts);\n const normalizedCounts = counts.map(\n (count) => Math.max(20, Math.round((count / maxCount) * 100)), // Minimum height of 20%\n );\n\n return {\n counts: normalizedCounts,\n binEdges,\n max: maxCount,\n min,\n max,\n };\n } catch (error) {\n this.afs.logger.error(\"Error calculating histogram:\", error);\n return { counts: [], binEdges: [], max: 0 };\n }\n }\n\n /**\n * Setup histogram highlight on range changes\n * @private\n */\n setupHistogramHighlight(elements, state, binEdges) {\n const bars = elements.slider.querySelectorAll(\".afs-histogram-bar\");\n\n const updateHistogram = () => {\n const minVal = state.currentMin;\n const maxVal = state.currentMax;\n\n bars.forEach((bar, index) => {\n const binStart = binEdges[index];\n const binEnd = binEdges[index + 1];\n\n // Highlight bars within the selected range\n if (binStart >= minVal && binEnd <= maxVal) {\n bar.classList.add(\"active\");\n } else {\n bar.classList.remove(\"active\");\n }\n });\n };\n\n // Update histogram on range changes using AFS instance\n this.afs.on(\"rangeFilter\", () => updateHistogram());\n\n // Initial update\n updateHistogram();\n }\n\n /**\n * Create histogram bars\n * @private\n */\n createHistogramBars(histogramData, colors) {\n const { counts } = histogramData;\n const histogram = document.createElement(\"div\");\n histogram.className = \"afs-histogram\";\n\n counts.forEach((height) => {\n const bar = document.createElement(\"div\");\n bar.className = \"afs-histogram-bar\";\n bar.style.height = `${height}%`;\n histogram.appendChild(bar);\n });\n\n return histogram;\n }\n\n /**\n * Initialize slider state\n * @private\n */\n initializeState(min, max, step, type) {\n return {\n min,\n max,\n currentMin: min,\n currentMax: max,\n step,\n type,\n isDragging: false,\n };\n }\n\n /**\n * Append elements to container\n * @private\n */\n appendElements(container, elements) {\n const {\n slider,\n track,\n selectedRange,\n minThumb,\n maxThumb,\n minValue,\n maxValue,\n } = elements;\n\n slider.appendChild(track);\n slider.appendChild(selectedRange);\n slider.appendChild(minThumb);\n slider.appendChild(maxThumb);\n slider.appendChild(minValue);\n slider.appendChild(maxValue);\n container.appendChild(slider);\n }\n\n /**\n * Setup event handlers for slider\n * @private\n */\n setupEventHandlers(elements, state, key) {\n const { minThumb, maxThumb } = elements;\n\n const handleStart = (isMin) => (e) => {\n e.preventDefault(); // Prevent scrolling while dragging on mobile\n state.isDragging = true;\n \n // Get the correct event coordinates whether mouse or touch\n const getEventXY = (event) => {\n return event.touches ? event.touches[0] : event;\n };\n\n const moveHandler = (moveEvent) => {\n const evt = getEventXY(moveEvent);\n this.createMoveHandler(elements, state, key, isMin)(evt);\n };\n\n const stopHandler = () => {\n state.isDragging = false;\n \n // Remove both mouse and touch event listeners\n window.removeEventListener('mousemove', moveHandler);\n window.removeEventListener('mouseup', stopHandler);\n window.removeEventListener('touchmove', moveHandler);\n window.removeEventListener('touchend', stopHandler);\n window.removeEventListener('touchcancel', stopHandler);\n \n this.applyFilter(key);\n };\n\n // Add both mouse and touch event listeners\n window.addEventListener('mousemove', moveHandler);\n window.addEventListener('mouseup', stopHandler);\n window.addEventListener('touchmove', moveHandler, { passive: false });\n window.addEventListener('touchend', stopHandler);\n window.addEventListener('touchcancel', stopHandler);\n };\n\n // Add both mouse and touch event listeners to thumbs\n minThumb.addEventListener('mousedown', handleStart(true));\n minThumb.addEventListener('touchstart', handleStart(true), { passive: false });\n maxThumb.addEventListener('mousedown', handleStart(false));\n maxThumb.addEventListener('touchstart', handleStart(false), { passive: false });\n }\n\n /**\n * Update slider UI\n * @private\n */\n updateSliderUI(key) {\n const { state, elements } = this.activeRanges.get(key);\n const { minThumb, maxThumb, selectedRange, minValue, maxValue } = elements;\n\n // Calculate positions with padding consideration\n const range = state.max - state.min;\n const minPos = ((state.currentMin - state.min) / range) * 100;\n const maxPos = ((state.currentMax - state.min) / range) * 100;\n\n // Ensure thumbs stay within bounds\n const clampedMinPos = Math.max(0, Math.min(minPos, 100));\n const clampedMaxPos = Math.max(0, Math.min(maxPos, 100));\n\n // Position thumbs\n minThumb.style.left = `${clampedMinPos}%`;\n maxThumb.style.left = `${clampedMaxPos}%`;\n\n // Position selected range\n selectedRange.style.left = `${clampedMinPos}%`;\n selectedRange.style.width = `${clampedMaxPos - clampedMinPos}%`;\n\n // Format values\n const formatValue =\n state.type === \"date\"\n ? (value) => new Date(value).toLocaleDateString()\n : (value) => value.toFixed(2);\n\n // Update value labels\n minValue.textContent = formatValue(state.currentMin);\n maxValue.textContent = formatValue(state.currentMax);\n\n // Position value labels considering bounds\n minValue.style.left = `${clampedMinPos}%`;\n maxValue.style.left = `${clampedMaxPos}%`;\n\n // Handle edge cases for value label positioning\n if (clampedMinPos < 5) {\n minValue.style.transform = \"translateX(0)\";\n } else if (clampedMinPos > 95) {\n minValue.style.transform = \"translateX(-100%)\";\n } else {\n minValue.style.transform = \"translateX(-50%)\";\n }\n\n if (clampedMaxPos < 5) {\n maxValue.style.transform = \"translateX(0)\";\n } else if (clampedMaxPos > 95) {\n maxValue.style.transform = \"translateX(-100%)\";\n } else {\n maxValue.style.transform = \"translateX(-50%)\";\n }\n }\n\n // Also update the createMoveHandler to respect the padding\n createMoveHandler(elements, state, key, isMin) {\n this.afs.logger.debug(`Creating move handler for ${key}`);\n\n const { track } = elements;\n const PADDING = 5;\n\n return debounce((e) => {\n const clientX = e.touches ? e.touches[0].clientX : e.clientX;\n const rect = track.getBoundingClientRect();\n const totalWidth = rect.width;\n const paddingPixels = (PADDING / 100) * totalWidth;\n\n // Calculate percent with padding consideration\n const rawPercent =\n (clientX - rect.left - paddingPixels) /\n (totalWidth - 2 * paddingPixels);\n const percent = Math.min(Math.max(0, rawPercent), 1);\n\n // Calculate value considering the full range\n const value = state.min + (state.max - state.min) * percent;\n const stepped = Math.round(value / state.step) * state.step;\n\n if (isMin) {\n state.currentMin = Math.min(stepped, state.currentMax);\n } else {\n state.currentMax = Math.max(stepped, state.currentMin);\n }\n\n this.updateSliderUI(key);\n }, 16); // ~60fps\n }\n\n /**\n * Apply range filter\n * @private\n */\n applyFilter(key) {\n this.afs.logger.debug(`Applying range filter for ${key}`);\n\n const { state } = this.activeRanges.get(key);\n\n this.afs.items.forEach((item) => {\n const value =\n state.type === \"date\"\n ? new Date(item.dataset[key]).getTime()\n : parseFloat(item.dataset[key]);\n\n if (value >= state.currentMin && value <= state.currentMax) {\n this.afs.showItem(item);\n } else {\n this.afs.hideItem(item);\n }\n });\n\n this.afs.updateCounter();\n this.afs.urlManager.updateURL();\n this.afs.emit(\"rangeFilter\", {\n key,\n min: state.currentMin,\n max: state.currentMax,\n });\n }\n\n /**\n * Get current range values\n * @param {string} key - Range key\n * @returns {Object} Current range values\n */\n getRangeValues(key) {\n const range = this.activeRanges.get(key);\n if (!range) return null;\n\n return {\n min: range.state.currentMin,\n max: range.state.currentMax,\n type: range.state.type,\n };\n }\n\n /**\n * Set range values\n * @param {string} key - Range key\n * @param {number} min - Minimum value\n * @param {number} max - Maximum value\n */\n setRangeValues(key, min, max) {\n const range = this.activeRanges.get(key);\n if (!range) return;\n\n range.state.currentMin = min;\n range.state.currentMax = max;\n this.updateSliderUI(key);\n this.applyFilter(key);\n }\n\n /**\n * Remove range slider\n * @param {string} key - Range key\n */\n removeRangeSlider(key) {\n const range = this.activeRanges.get(key);\n if (!range) return;\n\n range.elements.slider.remove();\n this.activeRanges.delete(key);\n this.afs.logger.info(`Range slider removed for ${key}`);\n }\n}\n","/**\n * @fileoverview Date filter implementation for AFS\n */\n\nimport { debounce } from '../utils';\n\nexport class DateFilter {\n constructor(afs) {\n this.afs = afs;\n this.activeDateRanges = new Map();\n this.defaultFormat = this.afs.options.get('dateFormat') || 'YYYY-MM-DD';\n }\n\n /**\n * @typedef {Object} DateRangeOptions\n * @property {string} key - Data attribute key\n * @property {HTMLElement} container - Container element\n * @property {Date} [minDate] - Minimum date\n * @property {Date} [maxDate] - Maximum date\n * @property {string} [format] - Date format (default: YYYY-MM-DD)\n */\n\n /**\n * Add date range filter\n * @param {DateRangeOptions} options - Date range options\n */\n addDateRange({ key, container, minDate, maxDate, format = this.defaultFormat }) {\n this.afs.logger.debug(`Adding date range for ${key}`);\n\n if (!container) {\n this.afs.logger.error('Container element required for date range');\n return;\n }\n\n // Calculate min/max dates if not provided\n const dates = this.calculateMinMaxDates(key);\n minDate = minDate ?? dates.min;\n maxDate = maxDate ?? dates.max;\n\n // Create date picker elements\n const elements = this.createDateElements();\n const state = this.initializeState(minDate, maxDate, format);\n\n // Add elements to container\n this.appendElements(container, elements);\n\n // Setup event handlers\n this.setupEventHandlers(elements, state, key);\n\n // Store state\n this.activeDateRanges.set(key, { state, elements });\n\n // Initial update\n this.updateDateUI(key);\n\n this.afs.logger.info(`Date range added for ${key}`);\n }\n\n /**\n * Calculate min and max dates from items\n * @private\n */\n calculateMinMaxDates(key) {\n try {\n const validDates = Array.from(this.afs.items)\n .map(item => {\n if (!item || !item.dataset || !item.dataset[key]) {\n return null;\n }\n const date = new Date(item.dataset[key]);\n return isNaN(date.getTime()) ? null : date;\n })\n .filter(date => date !== null);\n \n if (validDates.length === 0) {\n // Return default date range if no valid dates found\n const today = new Date();\n return {\n min: new Date(today.getFullYear(), 0, 1), // January 1st of current year\n max: new Date(today.getFullYear(), 11, 31) // December 31st of current year\n };\n }\n \n return {\n min: new Date(Math.min(...validDates)),\n max: new Date(Math.max(...validDates))\n };\n } catch (error) {\n this.afs.logger.error('Error calculating date range:', error);\n // Return default date range on error\n const today = new Date();\n return {\n min: new Date(today.getFullYear(), 0, 1),\n max: new Date(today.getFullYear(), 11, 31)\n };\n }\n }\n\n /**\n * Create date picker elements\n * @private\n */\n createDateElements() {\n this.afs.logger.debug('Creating date picker elements');\n\n const container = document.createElement('div');\n container.className = 'afs-date-range-container';\n\n const startContainer = document.createElement('div');\n startContainer.className = 'afs-date-input-wrapper';\n \n const startLabel = document.createElement('label');\n startLabel.textContent = 'Start Date';\n \n const startInput = document.createElement('input');\n startInput.type = 'date';\n startInput.className = 'afs-date-input start-date';\n\n const endContainer = document.createElement('div');\n endContainer.className = 'afs-date-input-wrapper';\n \n const endLabel = document.createElement('label');\n endLabel.textContent = 'End Date';\n \n const endInput = document.createElement('input');\n endInput.type = 'date';\n endInput.className = 'afs-date-input end-date';\n\n startContainer.appendChild(startLabel);\n startContainer.appendChild(startInput);\n endContainer.appendChild(endLabel);\n endContainer.appendChild(endInput);\n\n container.appendChild(startContainer);\n container.appendChild(endContainer);\n\n return {\n container,\n startInput,\n endInput\n };\n }\n\n /**\n * Initialize date filter state\n * @private\n */\n initializeState(minDate, maxDate, format) {\n return {\n minDate,\n maxDate,\n currentStartDate: minDate,\n currentEndDate: maxDate,\n format\n };\n }\n\n /**\n * Append elements to container\n * @private\n */\n appendElements(container, elements) {\n container.appendChild(elements.container);\n }\n\n /**\n * Setup event handlers\n * @private\n */\n setupEventHandlers(elements, state, key) {\n this.afs.logger.debug(`Setting up event handlers for date range ${key}`);\n\n const { startInput, endInput } = elements;\n\n const handleDateChange = debounce(() => {\n const startDate = new Date(startInput.value);\n const endDate = new Date(endInput.value);\n\n if (!isNaN(startDate.getTime()) && !isNaN(endDate.getTime())) {\n state.currentStartDate = startDate;\n state.currentEndDate = endDate;\n this.applyDateFilter(key);\n }\n }, 300);\n\n startInput.addEventListener('change', handleDateChange);\n endInput.addEventListener('change', handleDateChange);\n }\n\n /**\n * Update date picker UI\n * @private\n */\n updateDateUI(key) {\n try {\n const { state, elements } = this.activeDateRanges.get(key);\n const { startInput, endInput } = elements;\n \n // Format dates for input\n const formatDate = date => {\n try {\n const d = new Date(date);\n if (isNaN(d.getTime())) {\n throw new Error('Invalid date');\n }\n return d.toISOString().split('T')[0];\n } catch (error) {\n this.afs.logger.error('Error formatting date:', error);\n return '';\n }\n };\n \n // Set min/max constraints\n startInput.min = formatDate(state.minDate);\n startInput.max = formatDate(state.maxDate);\n endInput.min = formatDate(state.minDate);\n endInput.max = formatDate(state.maxDate);\n \n // Set current values\n startInput.value = formatDate(state.currentStartDate);\n endInput.value = formatDate(state.currentEndDate);\n } catch (error) {\n this.afs.logger.error('Error updating date UI:', error);\n }\n }\n\n /**\n * Apply date filter\n * @private\n */\n applyDateFilter(key) {\n this.afs.logger.info(`Applying date filter for ${key}`);\n const { state } = this.activeDateRanges.get(key);\n \n this.afs.items.forEach(item => {\n try {\n // Check if item and dataset exist\n if (!item || !item.dataset || !item.dataset[key]) {\n this.afs.hideItem(item);\n return;\n }\n \n const itemDate = new Date(item.dataset[key]);\n \n // Check if date is valid\n if (isNaN(itemDate.getTime())) {\n this.afs.hideItem(item);\n return;\n }\n \n // Set time to midnight for consistent comparison\n const startDate = new Date(state.currentStartDate);\n startDate.setHours(0, 0, 0, 0);\n \n const endDate = new Date(state.currentEndDate);\n endDate.setHours(23, 59, 59, 999);\n \n const compareDate = new Date(itemDate);\n compareDate.setHours(0, 0, 0, 0);\n \n if (compareDate >= startDate && compareDate <= endDate) {\n this.afs.showItem(item);\n } else {\n this.afs.hideItem(item);\n }\n } catch (error) {\n this.afs.logger.error('Error filtering item by date:', error);\n this.afs.hideItem(item);\n }\n });\n \n this.afs.updateCounter();\n this.afs.urlManager.updateURL();\n this.afs.emit('dateFilter', {\n key,\n startDate: state.currentStartDate,\n endDate: state.currentEndDate\n });\n }\n\n /**\n * Get current date range\n * @param {string} key - Date range key\n * @returns {Object} Current date range\n */\n getDateRange(key) {\n const range = this.activeDateRanges.get(key);\n if (!range) return null;\n\n return {\n startDate: range.state.currentStartDate,\n endDate: range.state.currentEndDate\n };\n }\n\n /**\n * Set date range\n * @param {string} key - Date range key\n * @param {Date} startDate - Start date\n * @param {Date} endDate - End date\n */\n setDateRange(key, startDate, endDate) {\n const range = this.activeDateRanges.get(key);\n if (!range) return;\n\n range.state.currentStartDate = startDate;\n range.state.currentEndDate = endDate;\n this.updateDateUI(key);\n this.applyDateFilter(key);\n }\n\n /**\n * Remove date range\n * @param {string} key - Date range key\n */\n removeDateRange(key) {\n const range = this.activeDateRanges.get(key);\n if (!range) return;\n\n range.elements.container.remove();\n this.activeDateRanges.delete(key);\n this.afs.logger.info(`Date range removed for ${key}`);\n }\n}","/**\n * @fileoverview Advanced Filter System - Main Class\n */\nimport { Logger } from \"./core/Logger\";\nimport { Options } from \"./core/Options\";\nimport { State } from \"./core/State\";\nimport { StyleManager } from \"./styles/StyleManager\";\nimport { EventEmitter } from \"./core/EventEmitter\";\n\nimport { Filter } from \"./features/Filter\";\nimport { Search } from \"./features/Search\";\nimport { Sort } from \"./features/Sort\";\nimport { Pagination } from \"./features/Pagination\";\nimport { URLManager } from \"./features/URLManager\";\nimport { RangeFilter } from \"./features/RangeFilter\";\nimport { DateFilter } from \"./features/DateFilter\";\n\nimport { debounce } from \"./utils\";\n\n// Version\nexport const VERSION = '1.0.7';\n\nexport class AFS extends EventEmitter {\n /**\n * @param {Object} options - Configuration options\n */\n constructor(options = {}) {\n super();\n this.initializeCore(options);\n }\n\n /**\n * Initialize core components\n * @private\n */\n initializeCore(options) {\n try {\n this.options = new Options(options);\n this.logger = new Logger(\n this.options.get(\"debug\") || false,\n this.options.get(\"logLevel\") || \"info\",\n );\n this.state = new State();\n this.styleManager = new StyleManager(this.options);\n\n this.initializeDOM();\n this.initializeFeatures();\n this.setupLifecycle();\n } catch (error) {\n console.error(\"AFS initialization error:\", error);\n throw error;\n }\n }\n\n /**\n * Initialize DOM elements\n * @private\n */\n initializeDOM() {\n this.logger.debug(\"Initializing DOM elements\");\n\n this.container = document.querySelector(\n this.options.get(\"containerSelector\"),\n );\n if (!this.container) {\n throw new Error(\n `Container not found: ${this.options.get(\"containerSelector\")}`,\n );\n }\n\n this.items = this.container.querySelectorAll(\n this.options.get(\"itemSelector\"),\n );\n if (this.items.length === 0) {\n this.logger.warn(\"No items found in container\");\n }\n\n this.state.setState(\"items.total\", this.items.length);\n this.state.setState(\"items.visible\", new Set(this.items));\n }\n\n /**\n * Initialize features\n * @private\n */\n initializeFeatures() {\n this.logger.debug(\"Initializing features\");\n\n // Then initialize other features\n this.filter = new Filter(this);\n this.search = new Search(this);\n this.sort = new Sort(this);\n this.rangeFilter = new RangeFilter(this);\n this.urlManager = new URLManager(this);\n this.dateFilter = new DateFilter(this);\n this.pagination = new Pagination(this);\n\n // Apply styles\n this.styleManager.applyStyles();\n\n // Load initial state from URL\n this.urlManager.loadFromURL();\n }\n\n /**\n * Setup lifecycle events\n * @private\n */\n setupLifecycle() {\n if (this.options.get(\"responsive\")) {\n window.addEventListener(\"resize\", this.handleResize.bind(this));\n }\n\n if (this.options.get(\"preserveState\")) {\n document.addEventListener(\n \"visibilitychange\",\n this.handleVisibilityChange.bind(this),\n );\n }\n\n if (this.options.get(\"observeDOM\")) {\n this.setupMutationObserver();\n }\n\n this.emit(\"initialized\", {\n itemCount: this.items.length,\n options: this.options.export(),\n });\n }\n\n // Item Management Methods\n /**\n * Show item with animation\n * @public\n * @param {HTMLElement} item - Item to show\n */\n showItem(item) {\n // Update state first\n const visibleItems = this.state.getState().items.visible;\n visibleItems.add(item);\n this.state.setState(\"items.visible\", visibleItems);\n\n // Remove hidden class but keep opacity 0 initially\n item.classList.remove(this.options.get(\"hiddenClass\"));\n\n // Set initial animation state\n item.style.opacity = \"0\";\n item.style.transform = \"scale(0.95)\";\n item.style.display = \"\"; // Ensure item is not display: none\n\n // Force reflow before starting animation\n item.offsetHeight;\n\n // Add transition class if not present\n const transitionClass =\n this.options.get(\"transitionClass\") || \"afs-transition\";\n if (!item.classList.contains(transitionClass)) {\n item.classList.add(transitionClass);\n }\n\n // Start animation in next frame\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n // Double RAF for reliable animation\n item.style.opacity = \"1\";\n item.style.transform = \"scale(1)\";\n });\n });\n\n // Clean up after animation\n const duration = this.options.get(\"animationDuration\") || 300;\n setTimeout(() => {\n // Only clean up if item is still meant to be visible\n if (visibleItems.has(item)) {\n item.style.transform = \"\";\n item.style.opacity = \"\";\n }\n }, duration);\n }\n\n /**\n * Hide item with animation\n * @public\n * @param {HTMLElement} item - Item to hide\n */\n hideItem(item) {\n // Update state first\n const visibleItems = this.state.getState().items.visible;\n visibleItems.delete(item);\n this.state.setState(\"items.visible\", visibleItems);\n\n // Add transition class if not present\n const transitionClass =\n this.options.get(\"transitionClass\") || \"afs-transition\";\n if (!item.classList.contains(transitionClass)) {\n item.classList.add(transitionClass);\n }\n\n // Start hide animation\n requestAnimationFrame(() => {\n item.style.opacity = \"0\";\n item.style.transform = \"scale(0.95)\";\n });\n\n // Add hidden class and clean up after animation\n const duration = this.options.get(\"animationDuration\") || 300;\n setTimeout(() => {\n // Only hide if the item is still meant to be hidden\n if (!visibleItems.has(item)) {\n item.classList.add(this.options.get(\"hiddenClass\"));\n // Clean up styles\n item.style.transform = \"\";\n item.style.opacity = \"\";\n }\n }, duration);\n }\n\n /**\n * Add new items\n * @public\n */\n addItems(newItems) {\n const items = Array.isArray(newItems) ? newItems : [newItems];\n const fragment = document.createDocumentFragment();\n\n items.forEach((item) => {\n fragment.appendChild(item);\n this.state.getState().items.visible.add(item);\n });\n\n this.container.appendChild(fragment);\n this.items = this.container.querySelectorAll(\n this.options.get(\"itemSelector\"),\n );\n this.filter.applyFilters();\n }\n\n /**\n * Remove items\n * @public\n */\n removeItems(itemsToRemove) {\n const items = Array.isArray(itemsToRemove)\n ? itemsToRemove\n : [itemsToRemove];\n const visibleItems = this.state.getState().items.visible;\n\n items.forEach((item) => {\n visibleItems.delete(item);\n item.remove();\n });\n\n this.items = this.container.querySelectorAll(\n this.options.get(\"itemSelector\"),\n );\n this.updateCounter();\n }\n\n // State Management Methods\n /**\n * Save current state\n * @public\n */\n saveState() {\n if (!this.options.get(\"preserveState\")) return;\n\n const state = {\n filters: Array.from(this.filter.getActiveFilters()),\n search: this.search.getValue(),\n sort: this.sort.getCurrentSort(),\n pagination: this.pagination.getPageInfo(),\n timestamp: Date.now(),\n };\n\n localStorage.setItem(\"afs_state\", JSON.stringify(state));\n this.logger.debug(\"State saved\");\n }\n\n /**\n * Restore saved state\n * @public\n */\n restoreState() {\n if (!this.options.get(\"preserveState\")) return;\n\n try {\n const saved = localStorage.getItem(\"afs_state\");\n if (!saved) return;\n\n const state = JSON.parse(saved);\n if (Date.now() - state.timestamp > this.options.get(\"stateExpiry\")) {\n localStorage.removeItem(\"afs_state\");\n return;\n }\n\n this.setState(state);\n this.logger.debug(\"State restored\");\n } catch (error) {\n this.logger.error(\"Error restoring state:\", error);\n }\n }\n\n /**\n * Get current state\n * @public\n */\n getState() {\n return this.state.export();\n }\n\n /**\n * Set new state\n * @public\n */\n setState(newState) {\n this.state.import(newState);\n this.refresh();\n }\n\n // Update Methods\n /**\n * Update counter display\n * @public\n */\n updateCounter() {\n // Get counter element\n const counterElement = document.querySelector(\n this.options.get(\"counterSelector\"),\n );\n if (!counterElement) return;\n\n try {\n // Get count values\n const total = this.items.length;\n const visible = this.state.getState().items.visible.size;\n const filtered = total - visible;\n\n // Get counter options with defaults\n const counterOpts =\n this.options.get(\"counter\") || Options.defaults.counter;\n const template = counterOpts.template || \"Showing {visible} of {total}\";\n const formatter =\n counterOpts.formatter || ((num) => num.toLocaleString());\n\n // Format numbers\n const formattedVisible = formatter(visible);\n const formattedTotal = formatter(total);\n const formattedFiltered = formatter(filtered);\n\n // Build counter text\n let counterText = template\n .replace(\"{visible}\", formattedVisible)\n .replace(\"{total}\", formattedTotal)\n .replace(\"{filtered}\", formattedFiltered);\n\n // Add filtered count if enabled\n if (filtered > 0 && counterOpts.showFiltered) {\n const filteredTemplate =\n counterOpts.filteredTemplate || \"({filtered} filtered)\";\n counterText +=\n \" \" + filteredTemplate.replace(\"{filtered}\", formattedFiltered);\n }\n\n // Show no results message if applicable\n if (visible === 0 && counterOpts.noResultsTemplate) {\n counterText = counterOpts.noResultsTemplate;\n }\n\n // Update counter element\n counterElement.textContent = counterText;\n\n // Emit event\n this.emit(\"counterUpdated\", {\n total,\n visible,\n filtered,\n formattedTotal,\n formattedVisible,\n formattedFiltered,\n });\n } catch (error) {\n // Fallback to basic counter if anything fails\n this.logger.error(\"Error updating counter:\", error);\n counterElement.textContent = `${\n this.state.getState().items.visible.size\n }/${this.items.length}`;\n }\n }\n\n /**\n * Update options\n * @public\n */\n updateOptions(newOptions) {\n this.options.update(newOptions);\n this.styleManager.updateStyles(newOptions);\n this.refresh();\n }\n\n /**\n * Refresh system\n * @public\n */\n refresh() {\n this.logger.debug(\"Refreshing AFS\");\n\n this.items = this.container.querySelectorAll(\n this.options.get(\"itemSelector\"),\n );\n this.state.setState(\"items.total\", this.items.length);\n\n this.filter.applyFilters();\n this.search.search(this.search.getValue());\n this.pagination.update();\n\n this.emit(\"refreshed\", { itemCount: this.items.length });\n }\n\n // Event Handlers\n /**\n * Handle resize\n * @private\n */\n handleResize = debounce(() => {\n this.emit(\"resize\");\n this.refresh();\n }, 250);\n\n /**\n * Handle visibility change\n * @private\n */\n handleVisibilityChange() {\n if (document.hidden) {\n this.emit(\"hidden\");\n this.saveState();\n } else {\n this.emit(\"visible\");\n this.restoreState();\n }\n }\n\n /**\n * Setup mutation observer\n * @private\n */\n setupMutationObserver() {\n const observer = new MutationObserver((mutations) => {\n if (mutations.some((mutation) => mutation.type === \"childList\")) {\n this.refresh();\n }\n });\n\n observer.observe(this.container, {\n childList: true,\n subtree: true,\n });\n }\n\n // Utility Methods\n /**\n * Get version\n * @public\n */\n getVersion() {\n return VERSION;\n }\n\n /**\n * Check feature support\n * @public\n */\n isFeatureSupported(feature) {\n const supportedFeatures = {\n search: !!this.search,\n pagination: true,\n animation:\n typeof document.createElement(\"div\").style.transition !== \"undefined\",\n urlState: typeof window.history.pushState === \"function\",\n localStorage: (() => {\n try {\n localStorage.setItem(\"test\", \"test\");\n localStorage.removeItem(\"test\");\n return true;\n } catch (e) {\n return false;\n }\n })(),\n };\n\n return !!supportedFeatures[feature];\n }\n\n /**\n * Destroy instance\n * @public\n */\n destroy() {\n this.logger.debug(\"Destroying AFS instance\");\n\n // Remove event listeners\n window.removeEventListener(\"resize\", this.handleResize);\n document.removeEventListener(\n \"visibilitychange\",\n this.handleVisibilityChange,\n );\n\n // Destroy features\n this.filter.destroy();\n this.search.destroy();\n this.sort.destroy();\n this.pagination.destroy();\n this.rangeFilter.destroy();\n\n // Cleanup\n this.styleManager.removeStyles();\n this.state.reset();\n localStorage.removeItem(\"afs_state\");\n\n // Reset items\n this.items.forEach((item) => {\n item.style = \"\";\n item.classList.remove(\n this.options.get(\"hiddenClass\"),\n this.options.get(\"activeClass\"),\n );\n });\n\n this.emit(\"destroyed\");\n }\n}\n"],"names":["Logger","constructor","debug","arguments","length","undefined","logLevel","enabled","level","levels","error","warn","info","_log","currentLevelValue","messageLevel","timestamp","Date","toISOString","prefix","toUpperCase","_len","args","Array","_key","console","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","setDebugMode","hasOwnProperty","Options","defaults","containerSelector","itemSelector","filterButtonSelector","searchInputSelector","counterSelector","activeClass","hiddenClass","animationDuration","animationType","animationEasing","filterMode","searchKeys","debounceTime","dateFormat","counter","template","showFiltered","filteredTemplate","noResultsTemplate","formatter","num","toLocaleString","styles","slider","class","trackClass","thumbClass","valueClass","selectedClass","ui","showHistogram","bins","colors","primary","background","text","histogram","histogramActive","pagination","itemsPerPage","container","pageButtonClass","activePageClass","containerClass","scrollToTop","scrollOffset","scrollBehavior","userOptions","options","mergeOptions","initializeStyles","validate","defaultStyles","currentStyles","target","source","result","key","isArray","requiredSelectors","selector","Error","includes","get","path","split","reduce","obj","set","value","parts","last","pop","update","updates","reset","export","State","state","filters","current","Set","groups","Map","ranges","dateRanges","mode","groupMode","search","query","keys","sort","orders","items","visible","total","currentPage","totalPages","getState","setState","i","from","entries","import","importedState","StyleManager","styleElement","animation","duration","type","createBaseStyles","createRangeStyles","sliderStyles","createDateStyles","applyStyles","createPaginationStyles","createSearchStyles","textContent","document","createElement","head","appendChild","fallbackStyles","paginationOptions","buttonClass","searchClass","updateStyles","newOptions","removeStyles","remove","EventEmitter","events","onceEvents","on","eventName","callback","has","add","off","once","_this","onceWrapper","apply","delete","size","emit","forEach","removeAllListeners","clear","listenerCount","Animation","afs","animations","fade","in","opacity","transform","transitionTimingFunction","out","slide","scale","rotate","flip","zoom","bounce","blur","filter","skew","slideInLeft","slideInRight","fadeInUp","fadeInDown","bounceIn","applyShowAnimation","item","style","display","requestAnimationFrame","Object","assign","transition","applyHideAnimation","handleTransitionEnd","removeEventListener","addEventListener","setAnimation","Filter","filterButtons","activeFilters","currentFilters","filterGroups","sortOrders","setupFilters","logger","filterSelector","querySelectorAll","button","filterValue","dataset","bindFilterEvent","setLogic","logic","applyFilters","clearAllFilters","_","classList","allButton","findAllButton","urlManager","updateURL","resetFilters","toggleFilter","visibleItems","updateCounter","handleFilterClick","contains","previouslyVisible","itemMatchesFilters","emitFilterEvents","offsetHeight","itemCategories","categories","itemMatchesFilterGroups","itemMatchesAnyFilter","itemMatchesAllFilters","some","every","groupMatches","values","map","group","operator","matches","nowVisible","added","removed","addFilterGroup","groupId","validOperator","removeFilterGroup","setGroupMode","validMode","addFilter","removeFilter","setFilterMode","getActiveFilters","getFilterGroups","addFilterButton","sortWithOrder","currentOrder","newOrder","sortType","determineSortType","a","b","valueA","getSortValue","valueB","compareValues","reorderItems","order","shuffle","j","Math","floor","random","itemCount","isNaN","test","parseFloat","getTime","toLowerCase","comparison","fragment","createDocumentFragment","getCurrentSortOrder","clearSortOrders","checkboxes","checkbox","checked","setValue","refresh","removeFilterButton","destroy","debounce","func","wait","immediate","timeout","executedFunction","context","later","callNow","clearTimeout","setTimeout","Search","searchInput","minSearchLength","highlightClass","setupSearch","searchSelector","querySelector","bindSearchEvents","debouncedSearch","e","clearSearch","preventDefault","normalizedQuery","normalizeQuery","regex","createSearchRegex","searchText","getItemSearchText","matchesSearch","showItem","highlightMatches","hideItem","removeHighlights","trim","replace","escapedQuery","words","Boolean","pattern","word","join","RegExp","highlightedText","wordRegex","innerHTML","highlights","highlight","replaceWith","getValue","updateConfig","handleClear","handleEnter","Sort","sortButtons","setupSort","sortSelector","sortKey","direction","sortDirection","bindSortEvent","sortData","updateSortButtonState","btn","indicator","modifier","sortMultiple","criteria","sortWithComparator","comparator","data","getCurrentSort","addSortButton","removeSortButton","Pagination","setupPagination","log","className","itemsContainer","bindEvents","closest","page","goToPage","parseInt","max","ceil","currentState","updateVisibility","renderPagination","startIndex","endIndex","itemsToShow","slice","controls","createPaginationControls","showPrevNext","prevButton","createPageButton","disabled","active","range","calculatePageRange","start","createEllipsis","end","toString","nextButton","span","maxButtons","sideButtons","min","targetPage","previousPage","window","scrollTo","top","offsetTop","behavior","setPaginationMode","showAllItems","URLManager","defaultParams","URLSearchParams","setupPopStateHandler","loadFromURL","params","addFiltersToURL","addRangesToURL","addSearchToURL","addSortToURL","addPaginationToURL","pushState","filtersByType","_ref","currentMin","currentMax","queryString","newURL","location","pathname","href","history","filterParams","_ref2","isRegularFilter","_ref3","buttonFilter","searchQuery","sortParam","fromEntries","processFiltersFromURL","hasFilters","startsWith","processRangesFromURL","rangeKey","Number","str","processSearchFromURL","processSortFromURL","processPaginationFromURL","perPage","param","excludedParams","clearURL","getURLParams","hasParams","getParam","RangeFilter","activeRanges","styleManager","addRangeSlider","step","calculateMinMax","globalUiOptions","sliderUiOptions","histogramData","calculateHistogramData","counts","binEdges","elements","createSliderElements","initializeState","appendElements","setupEventHandlers","updateSliderUI","setupHistogramHighlight","track","createHistogramBars","selectedRange","minThumb","maxThumb","minValue","maxValue","createHistogram","index","bar","height","backgroundColor","binWidth","fill","binIndex","maxCount","normalizedCounts","count","round","bars","updateHistogram","minVal","maxVal","binStart","binEnd","isDragging","handleStart","isMin","getEventXY","event","touches","moveHandler","moveEvent","evt","createMoveHandler","stopHandler","applyFilter","passive","minPos","maxPos","clampedMinPos","clampedMaxPos","left","width","formatValue","toLocaleDateString","toFixed","PADDING","clientX","rect","getBoundingClientRect","totalWidth","paddingPixels","rawPercent","percent","stepped","getRangeValues","setRangeValues","removeRangeSlider","DateFilter","activeDateRanges","defaultFormat","addDateRange","minDate","maxDate","format","dates","calculateMinMaxDates","createDateElements","updateDateUI","validDates","date","today","getFullYear","startContainer","startLabel","startInput","endContainer","endLabel","endInput","currentStartDate","currentEndDate","handleDateChange","startDate","endDate","applyDateFilter","formatDate","d","itemDate","setHours","compareDate","getDateRange","setDateRange","removeDateRange","VERSION","AFS","initializeCore","initializeDOM","initializeFeatures","setupLifecycle","rangeFilter","dateFilter","handleResize","bind","handleVisibilityChange","setupMutationObserver","transitionClass","addItems","newItems","removeItems","itemsToRemove","saveState","getPageInfo","now","localStorage","setItem","JSON","stringify","restoreState","saved","getItem","parse","removeItem","newState","counterElement","filtered","counterOpts","formattedVisible","formattedTotal","formattedFiltered","counterText","updateOptions","hidden","observer","MutationObserver","mutations","mutation","observe","childList","subtree","getVersion","isFeatureSupported","feature","supportedFeatures","urlState"],"mappings":";;;;;;EAAA;EACA;EACA;;EAEO,MAAMA,MAAM,CAAC;EAClB;EACF;EACA;EACA;EACEC,EAAAA,WAAWA,GAAmC;EAAA,IAAA,IAAlCC,KAAK,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK,CAAA;EAAA,IAAA,IAAEG,QAAQ,GAAAH,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,MAAM,CAAA;MAC1C,IAAI,CAACI,OAAO,GAAGL,KAAK,CAAA;MACpB,IAAI,CAACM,KAAK,GAAGF,QAAQ,CAAA;MACrB,IAAI,CAACG,MAAM,GAAG;EACZC,MAAAA,KAAK,EAAE,CAAC;EACRC,MAAAA,IAAI,EAAE,CAAC;EACPC,MAAAA,IAAI,EAAE,CAAC;EACPV,MAAAA,KAAK,EAAE,CAAA;OACR,CAAA;EACH,GAAA;;EAEA;EACF;EACA;EACA;IACEW,IAAIA,CAACL,KAAK,EAAW;EACnB,IAAA,IAAI,CAAC,IAAI,CAACD,OAAO,EAAE,OAAA;MAEnB,MAAMO,iBAAiB,GAAG,IAAI,CAACL,MAAM,CAAC,IAAI,CAACD,KAAK,CAAC,CAAA;EACjD,IAAA,MAAMO,YAAY,GAAG,IAAI,CAACN,MAAM,CAACD,KAAK,CAAC,CAAA;MAEvC,IAAIO,YAAY,IAAID,iBAAiB,EAAE;QACrC,MAAME,SAAS,GAAG,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAE,CAAA;QAC1C,MAAMC,MAAM,GAAG,CAAA,KAAA,EAAQX,KAAK,CAACY,WAAW,EAAE,CAAKJ,EAAAA,EAAAA,SAAS,CAAE,CAAA,CAAA;QAAC,KAAAK,IAAAA,IAAA,GAAAlB,SAAA,CAAAC,MAAA,EARhDkB,IAAI,OAAAC,KAAA,CAAAF,IAAA,GAAAA,CAAAA,GAAAA,IAAA,WAAAG,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA,EAAA,EAAA;EAAJF,QAAAA,IAAI,CAAAE,IAAA,GAAArB,CAAAA,CAAAA,GAAAA,SAAA,CAAAqB,IAAA,CAAA,CAAA;EAAA,OAAA;EAUf,MAAA,QAAQhB,KAAK;EACX,QAAA,KAAK,OAAO;EACViB,UAAAA,OAAO,CAACf,KAAK,CAACS,MAAM,EAAE,GAAGG,IAAI,CAAC,CAAA;EAC9B,UAAA,MAAA;EACF,QAAA,KAAK,MAAM;EACTG,UAAAA,OAAO,CAACd,IAAI,CAACQ,MAAM,EAAE,GAAGG,IAAI,CAAC,CAAA;EAC7B,UAAA,MAAA;EACF,QAAA,KAAK,MAAM;EACTG,UAAAA,OAAO,CAACb,IAAI,CAACO,MAAM,EAAE,GAAGG,IAAI,CAAC,CAAA;EAC7B,UAAA,MAAA;EACF,QAAA,KAAK,OAAO;EACVG,UAAAA,OAAO,CAACvB,KAAK,CAACiB,MAAM,EAAE,GAAGG,IAAI,CAAC,CAAA;EAC9B,UAAA,MAAA;EACJ,OAAA;EACF,KAAA;EACF,GAAA;;EAEA;EACF;EACA;EACA;EACEZ,EAAAA,KAAKA,GAAU;EAAA,IAAA,KAAA,IAAAgB,KAAA,GAAAvB,SAAA,CAAAC,MAAA,EAANkB,IAAI,GAAAC,IAAAA,KAAA,CAAAG,KAAA,GAAAC,KAAA,GAAA,CAAA,EAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA,EAAA,EAAA;EAAJL,MAAAA,IAAI,CAAAK,KAAA,CAAAxB,GAAAA,SAAA,CAAAwB,KAAA,CAAA,CAAA;EAAA,KAAA;EACX,IAAA,IAAI,CAACd,IAAI,CAAC,OAAO,EAAE,GAAGS,IAAI,CAAC,CAAA;EAC7B,GAAA;;EAEA;EACF;EACA;EACA;EACEX,EAAAA,IAAIA,GAAU;EAAA,IAAA,KAAA,IAAAiB,KAAA,GAAAzB,SAAA,CAAAC,MAAA,EAANkB,IAAI,GAAAC,IAAAA,KAAA,CAAAK,KAAA,GAAAC,KAAA,GAAA,CAAA,EAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA,EAAA,EAAA;EAAJP,MAAAA,IAAI,CAAAO,KAAA,CAAA1B,GAAAA,SAAA,CAAA0B,KAAA,CAAA,CAAA;EAAA,KAAA;EACV,IAAA,IAAI,CAAChB,IAAI,CAAC,MAAM,EAAE,GAAGS,IAAI,CAAC,CAAA;EAC5B,GAAA;;EAEA;EACF;EACA;EACA;EACEV,EAAAA,IAAIA,GAAU;EAAA,IAAA,KAAA,IAAAkB,KAAA,GAAA3B,SAAA,CAAAC,MAAA,EAANkB,IAAI,GAAAC,IAAAA,KAAA,CAAAO,KAAA,GAAAC,KAAA,GAAA,CAAA,EAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA,EAAA,EAAA;EAAJT,MAAAA,IAAI,CAAAS,KAAA,CAAA5B,GAAAA,SAAA,CAAA4B,KAAA,CAAA,CAAA;EAAA,KAAA;EACV,IAAA,IAAI,CAAClB,IAAI,CAAC,MAAM,EAAE,GAAGS,IAAI,CAAC,CAAA;EAC5B,GAAA;;EAEA;EACF;EACA;EACA;EACEpB,EAAAA,KAAKA,GAAU;EAAA,IAAA,KAAA,IAAA8B,KAAA,GAAA7B,SAAA,CAAAC,MAAA,EAANkB,IAAI,GAAAC,IAAAA,KAAA,CAAAS,KAAA,GAAAC,KAAA,GAAA,CAAA,EAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA,EAAA,EAAA;EAAJX,MAAAA,IAAI,CAAAW,KAAA,CAAA9B,GAAAA,SAAA,CAAA8B,KAAA,CAAA,CAAA;EAAA,KAAA;EACX,IAAA,IAAI,CAACpB,IAAI,CAAC,OAAO,EAAE,GAAGS,IAAI,CAAC,CAAA;EAC7B,GAAA;;EAEA;EACF;EACA;EACA;IACEY,YAAYA,CAAC3B,OAAO,EAAkB;EAAA,IAAA,IAAhBC,KAAK,GAAAL,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,MAAM,CAAA;MAClC,IAAI,CAACI,OAAO,GAAGA,OAAO,CAAA;MACtB,IAAI,IAAI,CAACE,MAAM,CAAC0B,cAAc,CAAC3B,KAAK,CAAC,EAAE;QACrC,IAAI,CAACA,KAAK,GAAGA,KAAK,CAAA;EACpB,KAAA;EACA,IAAA,IAAI,CAACK,IAAI,CAAC,MAAM,EAAE,CAAcN,WAAAA,EAAAA,OAAO,GAAG,SAAS,GAAG,UAAU,CAAgBC,aAAAA,EAAAA,KAAK,EAAE,CAAC,CAAA;EAC1F,GAAA;EACF;;EC9FA;EACA;EACA;;EAEO,MAAM4B,OAAO,CAAC;EACnB;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEE;EACF;EACA;EACE,EAAA,OAAOC,QAAQ,GAAG;EAChB;EACAC,IAAAA,iBAAiB,EAAE,mBAAmB;EACtCC,IAAAA,YAAY,EAAE,cAAc;EAC5BC,IAAAA,oBAAoB,EAAE,aAAa;EACnCC,IAAAA,mBAAmB,EAAE,gBAAgB;EACrCC,IAAAA,eAAe,EAAE,iBAAiB;EAElC;EACAC,IAAAA,WAAW,EAAE,QAAQ;EACrBC,IAAAA,WAAW,EAAE,QAAQ;EAErB;EACAC,IAAAA,iBAAiB,EAAE,GAAG;EACtBC,IAAAA,aAAa,EAAE,MAAM;EACrBC,IAAAA,eAAe,EAAE,UAAU;EAE3B;EACAC,IAAAA,UAAU,EAAE,IAAI;MAChBC,UAAU,EAAE,CAAC,OAAO,CAAC;EACrBC,IAAAA,YAAY,EAAE,GAAG;EAEjB;EACAhD,IAAAA,KAAK,EAAE,KAAK;EACZI,IAAAA,QAAQ,EAAE,MAAM;EAEhB;EACA6C,IAAAA,UAAU,EAAE,YAAY;EAExBC,IAAAA,OAAO,EAAE;EACPC,MAAAA,QAAQ,EAAE,8BAA8B;EACxCC,MAAAA,YAAY,EAAE,IAAI;EAClBC,MAAAA,gBAAgB,EAAE,uBAAuB;EACzCC,MAAAA,iBAAiB,EAAE,gBAAgB;EACnCC,MAAAA,SAAS,EAAGC,GAAG,IAAKA,GAAG,CAACC,cAAc,EAAC;OACxC;EAED;EACAC,IAAAA,MAAM,EAAE;EACNC,MAAAA,MAAM,EAAE;EACNC,QAAAA,KAAK,EAAE,kBAAkB;EACzBC,QAAAA,UAAU,EAAE,iBAAiB;EAC7BC,QAAAA,UAAU,EAAE,iBAAiB;EAC7BC,QAAAA,UAAU,EAAE,iBAAiB;EAC7BC,QAAAA,aAAa,EAAE,oBAAoB;EACnC;EACAC,QAAAA,EAAE,EAAE;EACFC,UAAAA,aAAa,EAAE,KAAK;YACpBC,IAAI,EAAE,EAAE;EACV,SAAA;SACD;EACDC,MAAAA,MAAM,EAAE;EACNC,QAAAA,OAAO,EAAE,MAAM;EACfC,QAAAA,UAAU,EAAE,SAAS;EACrBC,QAAAA,IAAI,EAAE,MAAM;EACZC,QAAAA,SAAS,EAAE,SAAS;EAAE;UACtBC,eAAe,EAAE,MAAM;EACzB,OAAA;OACD;EAED;EACAC,IAAAA,UAAU,EAAE;EACVrE,MAAAA,OAAO,EAAE,KAAK;EACdsE,MAAAA,YAAY,EAAE,EAAE;EAChBC,MAAAA,SAAS,EAAE,2BAA2B;EACtCC,MAAAA,eAAe,EAAE,iBAAiB;EAClCC,MAAAA,eAAe,EAAE,iBAAiB;EAClCC,MAAAA,cAAc,EAAE,gBAAgB;EAChCC,MAAAA,WAAW,EAAE,KAAK;EAClBC,MAAAA,YAAY,EAAE,EAAE;QAChBC,cAAc,EAAE,QAAQ;EAC1B,KAAA;KACD,CAAA;EAEDnF,EAAAA,WAAWA,GAAmB;EAAA,IAAA,IAAlBoF,WAAW,GAAAlF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;EAC1B,IAAA,IAAI,CAACmF,OAAO,GAAG,IAAI,CAACC,YAAY,CAACnD,OAAO,CAACC,QAAQ,EAAEgD,WAAW,CAAC,CAAA;MAC/D,IAAI,CAACG,gBAAgB,EAAE,CAAA;MACvB,IAAI,CAACC,QAAQ,EAAE,CAAA;EACjB,GAAA;;EAEA;EACF;EACA;EACA;EACED,EAAAA,gBAAgBA,GAAG;EACjB,IAAA,MAAME,aAAa,GAAGtD,OAAO,CAACC,QAAQ,CAACuB,MAAM,CAAA;MAC7C,MAAM+B,aAAa,GAAG,IAAI,CAACL,OAAO,CAAC1B,MAAM,IAAI,EAAE,CAAA;EAE/C,IAAA,IAAI,CAAC0B,OAAO,CAAC1B,MAAM,GAAG,IAAI,CAAC2B,YAAY,CAACG,aAAa,EAAEC,aAAa,CAAC,CAAA;;EAErE;EACA,IAAA,IAAI,CAACL,OAAO,CAAC1B,MAAM,CAACU,MAAM,GAAG;QAC3B,GAAGoB,aAAa,CAACpB,MAAM;EACvB,MAAA,IAAIqB,aAAa,CAACrB,MAAM,IAAI,EAAE,CAAA;OAC/B,CAAA;EACL,GAAA;;EAEE;EACF;EACA;EACA;EACA;EACA;EACA;EACEiB,EAAAA,YAAYA,CAACK,MAAM,EAAEC,MAAM,EAAE;EAC3B,IAAA,MAAMC,MAAM,GAAG;QAAE,GAAGF,MAAAA;OAAQ,CAAA;EAE5B,IAAA,KAAK,MAAMG,GAAG,IAAIF,MAAM,EAAE;QACxB,IAAIA,MAAM,CAACE,GAAG,CAAC,KAAK,IAAI,IAAI,OAAOF,MAAM,CAACE,GAAG,CAAC,KAAK,QAAQ,IAAI,CAACxE,KAAK,CAACyE,OAAO,CAACH,MAAM,CAACE,GAAG,CAAC,CAAC,EAAE;EAC1F;EACA,QAAA,IAAI,CAACH,MAAM,CAACG,GAAG,CAAC,IAAI,OAAOH,MAAM,CAACG,GAAG,CAAC,KAAK,QAAQ,EAAE;EACnDD,UAAAA,MAAM,CAACC,GAAG,CAAC,GAAG,EAAE,CAAA;EAClB,SAAA;EACA;EACAD,QAAAA,MAAM,CAACC,GAAG,CAAC,GAAG,IAAI,CAACR,YAAY,CAACO,MAAM,CAACC,GAAG,CAAC,EAAEF,MAAM,CAACE,GAAG,CAAC,CAAC,CAAA;SAC1D,MAAM,IAAIF,MAAM,CAACE,GAAG,CAAC,KAAK1F,SAAS,EAAE;EACpC;EACAyF,QAAAA,MAAM,CAACC,GAAG,CAAC,GAAGF,MAAM,CAACE,GAAG,CAAC,CAAA;EAC3B,OAAA;EACF,KAAA;EAEA,IAAA,OAAOD,MAAM,CAAA;EACf,GAAA;;EAEA;EACF;EACA;EACA;EACA;EACEL,EAAAA,QAAQA,GAAG;EACT;EACA,IAAA,MAAMQ,iBAAiB,GAAG,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAA;EAC/D,IAAA,KAAK,MAAMC,QAAQ,IAAID,iBAAiB,EAAE;QACxC,IAAI,OAAO,IAAI,CAACX,OAAO,CAACY,QAAQ,CAAC,KAAK,QAAQ,EAAE;EAC9C,QAAA,MAAM,IAAIC,KAAK,CAAC,CAAGD,EAAAA,QAAQ,mBAAmB,CAAC,CAAA;EACjD,OAAA;EACF,KAAA;;EAEA;EACA,IAAA,IAAI,OAAO,IAAI,CAACZ,OAAO,CAACzC,iBAAiB,KAAK,QAAQ,IAAI,IAAI,CAACyC,OAAO,CAACzC,iBAAiB,GAAG,CAAC,EAAE;EAC5F,MAAA,MAAM,IAAIsD,KAAK,CAAC,6CAA6C,CAAC,CAAA;EAChE,KAAA;;EAEA;EACA,IAAA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAACC,QAAQ,CAAC,IAAI,CAACd,OAAO,CAACtC,UAAU,CAAC5B,WAAW,EAAE,CAAC,EAAE;EAClE,MAAA,MAAM,IAAI+E,KAAK,CAAC,yCAAyC,CAAC,CAAA;EAC5D,KAAA;;EAEA;MACA,IAAI,CAAC5E,KAAK,CAACyE,OAAO,CAAC,IAAI,CAACV,OAAO,CAACrC,UAAU,CAAC,IAAI,IAAI,CAACqC,OAAO,CAACrC,UAAU,CAAC7C,MAAM,KAAK,CAAC,EAAE;EACnF,MAAA,MAAM,IAAI+F,KAAK,CAAC,sCAAsC,CAAC,CAAA;EACzD,KAAA;;EAEA;EACA,IAAA,IAAI,IAAI,CAACb,OAAO,CAAClC,OAAO,EAAE;QACxB,IAAI,OAAO,IAAI,CAACkC,OAAO,CAAClC,OAAO,CAACC,QAAQ,KAAK,QAAQ,EAAE;EACrD,QAAA,MAAM,IAAI8C,KAAK,CAAC,mCAAmC,CAAC,CAAA;EACtD,OAAA;QACA,IAAI,OAAO,IAAI,CAACb,OAAO,CAAClC,OAAO,CAACE,YAAY,KAAK,SAAS,EAAE;UAC1D,IAAI,CAACgC,OAAO,CAAClC,OAAO,CAACE,YAAY,GAAG,IAAI,CAAC;EAC3C,OAAA;QACA,IAAI,OAAO,IAAI,CAACgC,OAAO,CAAClC,OAAO,CAACK,SAAS,KAAK,UAAU,EAAE;EACxD,QAAA,IAAI,CAAC6B,OAAO,CAAClC,OAAO,CAACK,SAAS,GAAIC,GAAG,IAAKA,GAAG,CAACC,cAAc,EAAE,CAAC;EACjE,OAAA;EACF,KAAC,MAAM;EACL,MAAA,IAAI,CAAC2B,OAAO,CAAClC,OAAO,GAAG;UAAE,GAAGhB,OAAO,CAACC,QAAQ,CAACe,OAAAA;EAAQ,OAAC,CAAC;EACzD,KAAA;EACF,GAAA;;EAEA;EACF;EACA;EACA;EACA;IACEiD,GAAGA,CAACC,IAAI,EAAE;MACR,OAAOA,IAAI,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,MAAM,CAAC,CAACC,GAAG,EAAEV,GAAG,KAAKU,GAAG,GAAGV,GAAG,CAAC,EAAE,IAAI,CAACT,OAAO,CAAC,CAAA;EACvE,GAAA;;EAEA;EACF;EACA;EACA;EACA;EACEoB,EAAAA,GAAGA,CAACJ,IAAI,EAAEK,KAAK,EAAE;EACf,IAAA,MAAMC,KAAK,GAAGN,IAAI,CAACC,KAAK,CAAC,GAAG,CAAC,CAAA;EAC7B,IAAA,MAAMM,IAAI,GAAGD,KAAK,CAACE,GAAG,EAAE,CAAA;MACxB,MAAMlB,MAAM,GAAGgB,KAAK,CAACJ,MAAM,CAAC,CAACC,GAAG,EAAEV,GAAG,KAAK;EACxC,MAAA,IAAI,EAAEA,GAAG,IAAIU,GAAG,CAAC,EAAEA,GAAG,CAACV,GAAG,CAAC,GAAG,EAAE,CAAA;QAChC,OAAOU,GAAG,CAACV,GAAG,CAAC,CAAA;EACjB,KAAC,EAAE,IAAI,CAACT,OAAO,CAAC,CAAA;EAEhBM,IAAAA,MAAM,CAACiB,IAAI,CAAC,GAAGF,KAAK,CAAA;MACpB,IAAI,CAAClB,QAAQ,EAAE,CAAA;EACjB,GAAA;;EAEA;EACF;EACA;EACA;IACEsB,MAAMA,CAACC,OAAO,EAAE;EACd,IAAA,IAAI,CAAC1B,OAAO,GAAG,IAAI,CAACC,YAAY,CAAC,IAAI,CAACD,OAAO,EAAE0B,OAAO,CAAC,CAAA;MACvD,IAAI,CAACvB,QAAQ,EAAE,CAAA;EACjB,GAAA;;EAEA;EACF;EACA;EACEwB,EAAAA,KAAKA,GAAG;MACN,IAAI,CAAC3B,OAAO,GAAG;EAAE,MAAA,GAAGlD,OAAO,CAACC,QAAAA;OAAU,CAAA;EACxC,GAAA;;EAEA;EACF;EACA;EACA;EACE6E,EAAAA,MAAMA,GAAG;MACP,OAAO;EAAE,MAAA,GAAG,IAAI,CAAC5B,OAAAA;OAAS,CAAA;EAC5B,GAAA;EACF;;ECtPA;EACA;EACA;;EAEO,MAAM6B,KAAK,CAAC;EACjBlH,EAAAA,WAAWA,GAAG;MACZ,IAAI,CAACmH,KAAK,GAAG;EACXC,MAAAA,OAAO,EAAE;EACPC,QAAAA,OAAO,EAAE,IAAIC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;EACvBC,QAAAA,MAAM,EAAE,IAAIC,GAAG,EAAE;EACjBC,QAAAA,MAAM,EAAE,IAAID,GAAG,EAAE;EACjBE,QAAAA,UAAU,EAAE,IAAIF,GAAG,EAAE;EACrBG,QAAAA,IAAI,EAAE,IAAI;EACVC,QAAAA,SAAS,EAAE,IAAA;SACZ;EACDC,MAAAA,MAAM,EAAE;EACNC,QAAAA,KAAK,EAAE,EAAE;UACTC,IAAI,EAAE,CAAC,OAAO,CAAA;SACf;EACDC,MAAAA,IAAI,EAAE;UACJC,MAAM,EAAE,EAAE;EACVZ,QAAAA,OAAO,EAAE,IAAA;SACV;EACDa,MAAAA,KAAK,EAAE;EACLC,QAAAA,OAAO,EAAE,IAAIb,GAAG,EAAE;EAClBc,QAAAA,KAAK,EAAE,CAAA;SACR;EACDzD,MAAAA,UAAU,EAAE;EACV0D,QAAAA,WAAW,EAAE,CAAC;EACdzD,QAAAA,YAAY,EAAE,EAAE;EAChB0D,QAAAA,UAAU,EAAE,CAAA;EACd,OAAA;OACD,CAAA;EACH,GAAA;;EAEA;EACF;EACA;EACA;EACEC,EAAAA,QAAQA,GAAG;MACT,OAAO,IAAI,CAACpB,KAAK,CAAA;EACnB,GAAA;;EAEA;EACF;EACA;EACA;EACA;EACEqB,EAAAA,QAAQA,CAACnC,IAAI,EAAEK,KAAK,EAAE;EACpB,IAAA,MAAMC,KAAK,GAAGN,IAAI,CAACC,KAAK,CAAC,GAAG,CAAC,CAAA;EAC7B,IAAA,IAAIe,OAAO,GAAG,IAAI,CAACF,KAAK,CAAA;EAExB,IAAA,KAAK,IAAIsB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG9B,KAAK,CAACxG,MAAM,GAAG,CAAC,EAAEsI,CAAC,EAAE,EAAE;QACzC,IAAI,EAAE9B,KAAK,CAAC8B,CAAC,CAAC,IAAIpB,OAAO,CAAC,EAAE;UAC1BA,OAAO,CAACV,KAAK,CAAC8B,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;EACxB,OAAA;EACApB,MAAAA,OAAO,GAAGA,OAAO,CAACV,KAAK,CAAC8B,CAAC,CAAC,CAAC,CAAA;EAC7B,KAAA;MAEApB,OAAO,CAACV,KAAK,CAACA,KAAK,CAACxG,MAAM,GAAG,CAAC,CAAC,CAAC,GAAGuG,KAAK,CAAA;EAC1C,GAAA;;EAEA;EACF;EACA;EACA;EACEO,EAAAA,MAAMA,GAAG;MACP,OAAO;EACLG,MAAAA,OAAO,EAAE;EACPC,QAAAA,OAAO,EAAE/F,KAAK,CAACoH,IAAI,CAAC,IAAI,CAACvB,KAAK,CAACC,OAAO,CAACC,OAAO,CAAC;EAC/CE,QAAAA,MAAM,EAAEjG,KAAK,CAACoH,IAAI,CAAC,IAAI,CAACvB,KAAK,CAACC,OAAO,CAACG,MAAM,CAACoB,OAAO,EAAE,CAAC;EACvDlB,QAAAA,MAAM,EAAEnG,KAAK,CAACoH,IAAI,CAAC,IAAI,CAACvB,KAAK,CAACC,OAAO,CAACK,MAAM,CAACkB,OAAO,EAAE,CAAC;EACvDjB,QAAAA,UAAU,EAAEpG,KAAK,CAACoH,IAAI,CAAC,IAAI,CAACvB,KAAK,CAACC,OAAO,CAACM,UAAU,CAACiB,OAAO,EAAE,CAAC;EAC/DhB,QAAAA,IAAI,EAAE,IAAI,CAACR,KAAK,CAACC,OAAO,CAACO,IAAI;EAC7BC,QAAAA,SAAS,EAAE,IAAI,CAACT,KAAK,CAACC,OAAO,CAACQ,SAAAA;SAC/B;EACDC,MAAAA,MAAM,EAAE;UAAE,GAAG,IAAI,CAACV,KAAK,CAACU,MAAAA;SAAQ;EAChCG,MAAAA,IAAI,EAAE;UAAE,GAAG,IAAI,CAACb,KAAK,CAACa,IAAAA;SAAM;EAC5BrD,MAAAA,UAAU,EAAE;UAAE,GAAG,IAAI,CAACwC,KAAK,CAACxC,UAAAA;EAAW,OAAA;OACxC,CAAA;EACH,GAAA;;EAEA;EACF;EACA;EACA;IACEiE,MAAMA,CAACC,aAAa,EAAE;MACpB,IAAIA,aAAa,CAACzB,OAAO,EAAE;EACzB,MAAA,IAAI,CAACD,KAAK,CAACC,OAAO,CAACC,OAAO,GAAG,IAAIC,GAAG,CAACuB,aAAa,CAACzB,OAAO,CAACC,OAAO,CAAC,CAAA;EACnE,MAAA,IAAI,CAACF,KAAK,CAACC,OAAO,CAACG,MAAM,GAAG,IAAIC,GAAG,CAACqB,aAAa,CAACzB,OAAO,CAACG,MAAM,CAAC,CAAA;EACjE,MAAA,IAAI,CAACJ,KAAK,CAACC,OAAO,CAACK,MAAM,GAAG,IAAID,GAAG,CAACqB,aAAa,CAACzB,OAAO,CAACK,MAAM,CAAC,CAAA;EACjE,MAAA,IAAI,CAACN,KAAK,CAACC,OAAO,CAACM,UAAU,GAAG,IAAIF,GAAG,CAACqB,aAAa,CAACzB,OAAO,CAACM,UAAU,CAAC,CAAA;QACzE,IAAI,CAACP,KAAK,CAACC,OAAO,CAACO,IAAI,GAAGkB,aAAa,CAACzB,OAAO,CAACO,IAAI,CAAA;QACpD,IAAI,CAACR,KAAK,CAACC,OAAO,CAACQ,SAAS,GAAGiB,aAAa,CAACzB,OAAO,CAACQ,SAAS,CAAA;EAChE,KAAA;MAEA,IAAIiB,aAAa,CAAChB,MAAM,EAAE;EACxB,MAAA,IAAI,CAACV,KAAK,CAACU,MAAM,GAAG;EAAE,QAAA,GAAGgB,aAAa,CAAChB,MAAAA;SAAQ,CAAA;EACjD,KAAA;MAEA,IAAIgB,aAAa,CAACb,IAAI,EAAE;EACtB,MAAA,IAAI,CAACb,KAAK,CAACa,IAAI,GAAG;EAAE,QAAA,GAAGa,aAAa,CAACb,IAAAA;SAAM,CAAA;EAC7C,KAAA;MAEA,IAAIa,aAAa,CAAClE,UAAU,EAAE;EAC5B,MAAA,IAAI,CAACwC,KAAK,CAACxC,UAAU,GAAG;EAAE,QAAA,GAAGkE,aAAa,CAAClE,UAAAA;SAAY,CAAA;EACzD,KAAA;EACF,GAAA;;EAEA;EACF;EACA;EACEqC,EAAAA,KAAKA,GAAG;MACN,IAAI,CAACG,KAAK,GAAG;EACXC,MAAAA,OAAO,EAAE;EACPC,QAAAA,OAAO,EAAE,IAAIC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;EACvBC,QAAAA,MAAM,EAAE,IAAIC,GAAG,EAAE;EACjBC,QAAAA,MAAM,EAAE,IAAID,GAAG,EAAE;EACjBE,QAAAA,UAAU,EAAE,IAAIF,GAAG,EAAE;EACrBG,QAAAA,IAAI,EAAE,IAAI;EACVC,QAAAA,SAAS,EAAE,IAAA;SACZ;EACDC,MAAAA,MAAM,EAAE;EACNC,QAAAA,KAAK,EAAE,EAAE;UACTC,IAAI,EAAE,CAAC,OAAO,CAAA;SACf;EACDC,MAAAA,IAAI,EAAE;UACJC,MAAM,EAAE,EAAE;EACVZ,QAAAA,OAAO,EAAE,IAAA;SACV;EACDa,MAAAA,KAAK,EAAE;EACLC,QAAAA,OAAO,EAAE,IAAIb,GAAG,EAAE;EAClBc,QAAAA,KAAK,EAAE,CAAA;SACR;EACDzD,MAAAA,UAAU,EAAE;EACV0D,QAAAA,WAAW,EAAE,CAAC;EACdzD,QAAAA,YAAY,EAAE,EAAE;EAChB0D,QAAAA,UAAU,EAAE,CAAA;EACd,OAAA;OACD,CAAA;EACH,GAAA;EACF;;EC7IA;EACA;EACA;;EAEO,MAAMQ,YAAY,CAAC;EACxB;EACF;EACA;IACE9I,WAAWA,CAACqF,OAAO,EAAE;MACnB,IAAI,CAACA,OAAO,GAAGA,OAAO,CAAA;MACtB,IAAI,CAAC0D,YAAY,GAAG,IAAI,CAAA;MACxB,IAAI,CAACtD,aAAa,GAAG;EACnB7B,MAAAA,MAAM,EAAE;EACNC,QAAAA,KAAK,EAAE,kBAAkB;EACzBC,QAAAA,UAAU,EAAE,iBAAiB;EAC7BC,QAAAA,UAAU,EAAE,iBAAiB;EAC7BC,QAAAA,UAAU,EAAE,iBAAiB;EAC7BC,QAAAA,aAAa,EAAE,oBAAA;SAChB;EACDI,MAAAA,MAAM,EAAE;EACNC,QAAAA,OAAO,EAAE,MAAM;EACfC,QAAAA,UAAU,EAAE,MAAM;EAClBC,QAAAA,IAAI,EAAE,MAAA;SACP;EACDwE,MAAAA,SAAS,EAAE;EACTC,QAAAA,QAAQ,EAAE,OAAO;EACjBC,QAAAA,IAAI,EAAE,UAAA;EACR,OAAA;OACD,CAAA;EACH,GAAA;;EAEA;EACF;EACA;EACA;EACA;EACEC,EAAAA,gBAAgBA,GAAG;MACjB,MAAMxG,WAAW,GAAG,IAAI,CAAC0C,OAAO,CAACe,GAAG,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAA;MAC/D,MAAM9D,YAAY,GAAG,IAAI,CAAC+C,OAAO,CAACe,GAAG,CAAC,cAAc,CAAC,IAAI,cAAc,CAAA;MACvE,MAAM7D,oBAAoB,GAAG,IAAI,CAAC8C,OAAO,CAACe,GAAG,CAAC,sBAAsB,CAAC,IAAI,aAAa,CAAA;MACtF,MAAM1D,WAAW,GAAG,IAAI,CAAC2C,OAAO,CAACe,GAAG,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAA;MAC/D,MAAMxD,iBAAiB,GAAG,IAAI,CAACyC,OAAO,CAACe,GAAG,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAA;MAC1E,MAAMtD,eAAe,GAAG,IAAI,CAACuC,OAAO,CAACe,GAAG,CAAC,iBAAiB,CAAC,IAAI,UAAU,CAAA;MAEzE,OAAO,CAAA;AACX,OAAA,EAASzD,WAAW,CAAA;AACpB;AACA;AACA;AACA,MAAA,EAAQL,YAAY,CAAA;AACpB;AACA;AACA;AACA,4BAA8BM,EAAAA,iBAAiB,IAAIE,eAAe,CAAA;AAClE,8BAAgCF,EAAAA,iBAAiB,IAAIE,eAAe,CAAA;AACpE,2BAA6BF,EAAAA,iBAAiB,IAAIE,eAAe,CAAA;AACjE;AACA;AACA,MAAQR,EAAAA,YAAY,IAAIK,WAAW,CAAA;AACnC;AACA;AACA;AACA;AACA;AACA,MAAA,EAAQJ,oBAAoB,CAAA;AAC5B;AACA,4BAA8BK,EAAAA,iBAAiB,IAAIE,eAAe,CAAA;AAClE;AACA;AACA,MAAQP,EAAAA,oBAAoB,IAAIG,WAAW,CAAA;AAC3C;AACA;AACA,IAAK,CAAA,CAAA;EACL,GAAA;;EAEE;EACF;EACA;EACA;EACA;EACE0G,EAAAA,iBAAiBA,GAAG;EAClB,IAAA,MAAMzF,MAAM,GAAG,IAAI,CAAC0B,OAAO,CAACe,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAACX,aAAa,CAAA;MAC/D,MAAM4D,YAAY,GAAG1F,MAAM,CAACC,MAAM,IAAI,IAAI,CAAC6B,aAAa,CAAC7B,MAAM,CAAA;MAC/D,MAAMS,MAAM,GAAGV,MAAM,CAACU,MAAM,IAAI,IAAI,CAACoB,aAAa,CAACpB,MAAM,CAAA;MAEzD,OAAO,CAAA;AACX;AACA,KAAOgF,EAAAA,YAAY,CAACxF,KAAK,CAAA;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAOwF,EAAAA,YAAY,CAACvF,UAAU,CAAA;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAoBO,EAAAA,MAAM,CAACE,UAAU,CAAA;AACrC;AACA;AACA;AACA,KAAO8E,EAAAA,YAAY,CAACtF,UAAU,CAAA;AAC9B;AACA;AACA;AACA;AACA,kBAAoBM,EAAAA,MAAM,CAACC,OAAO,CAAA;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,KAAO+E,EAAAA,YAAY,CAACrF,UAAU,CAAA;AAC9B;AACA;AACA;AACA;AACA,aAAeK,EAAAA,MAAM,CAACG,IAAI,CAAA;AAC1B;AACA;AACA,KAAO6E,EAAAA,YAAY,CAACpF,aAAa,CAAA;AACjC;AACA;AACA,kBAAoBI,EAAAA,MAAM,CAACC,OAAO,CAAA;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAA0BD,EAAAA,MAAM,CAACE,UAAU,CAAA;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAA0BF,EAAAA,MAAM,CAACC,OAAO,CAAA;AACxC;AACA,EAAG,CAAA,CAAA;EACD,GAAA;;EAEA;EACF;EACA;EACA;EACA;EACEgF,EAAAA,gBAAgBA,GAAG;EACjB,IAAA,MAAMjF,MAAM,GAAG,CAAC,IAAI,CAACgB,OAAO,CAACe,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAACX,aAAa,EAAEpB,MAAM,CAAA;MAExE,OAAO,CAAA;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAeA,EAAAA,MAAM,CAACG,IAAI,CAAA;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,wBAA0BH,EAAAA,MAAM,CAACE,UAAU,CAAA;AAC3C;AACA;AACA,aAAeF,EAAAA,MAAM,CAACG,IAAI,CAAA;AAC1B;AACA;AACA;AACA;AACA;AACA,oBAAsBH,EAAAA,MAAM,CAACC,OAAO,CAAA;AACpC;AACA,EAAG,CAAA,CAAA;EACD,GAAA;;EAEA;EACF;EACA;EACA;EACEiF,EAAAA,WAAWA,GAAG;M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"}