advanced-filter-system 1.0.8 → 1.0.9

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.
@@ -1 +1 @@
1
- {"version":3,"file":"AFS.esm.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: '.afs-filter-container',\n itemSelector: '.afs-filter-item',\n filterButtonSelector: '.afs-btn-filter',\n searchInputSelector: '.afs-filter-search',\n counterSelector: '.afs-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 // Add new UI options\n ui: {\n showHistogram: false,\n bins: 10, // Number of bins for histogram\n track: {\n radius: '2px', // Button radius\n background: '#e5e7eb', // Track color\n },\n thumb: {\n radius: '50%', // Button radius\n size: '16px', // Button size\n background: '#000', // Button color\n },\n histogram: {\n background: '#e5e7eb', // Histogram background\n bar: {\n background: '#000', // Bar color\n }\n }\n }\n },\n pagination: {\n ui: {\n button: {\n background: 'transparent',\n border: '1px solid #000',\n borderRadius: '4px',\n padding: '8px 12px',\n color: '#000',\n active: {\n background: '#000',\n color: '#fff',\n },\n hover: {\n background: '#000',\n color: '#fff',\n }\n }\n },\n },\n colors: {\n primary: '#000',\n background: '#e5e7eb',\n text: '#000',\n }\n },\n\n // Slider\n slider: {\n containerClass: '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\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 }\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\") || \".afs-filter-item\";\n const filterButtonSelector = this.options.get(\"filterButtonSelector\") || \".afs-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\");\n const sliderOptions = this.options.get(\"slider\") || {};\n const sliderStyles = styles.slider;\n const colors = styles.colors;\n\n const containerClass = sliderOptions.containerClass || \"afs-range-slider\";\n const trackClass = sliderOptions.trackClass || \"afs-range-track\";\n const thumbClass = sliderOptions.thumbClass || \"afs-range-thumb\";\n const valueClass = sliderOptions.valueClass || \"afs-range-value\";\n const selectedClass = sliderOptions.selectedClass || \"afs-range-selected\";\n\n return `\n /* Range Slider Styles */\n .${containerClass} {\n position: relative;\n width: auto;\n height: 40px;\n margin: 10px 0;\n padding: 0 8px;\n }\n\n .${trackClass} {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 100%;\n height: 4px;\n background: ${sliderStyles.ui.thumb.background || colors.background};\n border-radius: ${sliderStyles.ui.track.radius || \"2px\"};\n }\n\n .${thumbClass} {\n position: absolute;\n top: 50%;\n width: ${sliderStyles.ui.thumb.size || \"16px\"};\n height: ${sliderStyles.ui.thumb.size || \"16px\"};\n background: ${sliderStyles.ui.thumb.background || colors.primary};\n border-radius: ${sliderStyles.ui.thumb.radius || \"50%\"};\n transform: translate(-50%, -50%);\n cursor: pointer;\n z-index: 2;\n }\n\n .${valueClass} {\n position: absolute;\n top: -20px;\n transform: translateX(-50%);\n font-size: 10px;\n color: ${colors.text};\n }\n\n .${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: ${sliderStyles.ui.histogram.background ||colors.background};\n min-height: 4px;\n transition: background-color 0.2s ease;\n }\n\n .afs-histogram-bar.active {\n background-color: ${sliderStyles.ui.histogram.bar.background || 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\").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 styles = this.options.get(\"styles\");\n const paginationOptions = this.options.get(\"pagination\") || {};\n const colors = this.options.get(\"styles\").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 const paginationStyles = styles.pagination;\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: ${paginationStyles.ui.button.padding || '8px 12px'};\n border: ${paginationStyles.ui.button.border || '1px solid ' + colors.primary};\n border-radius: ${paginationStyles.ui.button.borderRadius || '4px'};\n cursor: pointer;\n transition: all 200ms ease-out;\n background: ${paginationStyles.ui.button.background || 'transparent' };\n color: ${paginationStyles.ui.button.color || colors.primary};\n }\n\n .${buttonClass}:hover {\n background: ${paginationStyles.ui.button.hover.background || colors.primary};\n color: ${paginationStyles.ui.button.hover.color || 'white'};\n }\n\n .${buttonClass}.${activeClass} {\n background: ${paginationStyles.ui.button.active.background || colors.primary};\n color: ${paginationStyles.ui.button.active.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\").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\n if (!this.afs.options.get('pagination.enabled')) {\n return;\n }\n\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 this.options = this.afs.options.get(\"slider\");\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 colors = styles.colors || this.afs.styleManager.defaultStyles.colors;\n const sliderOptions = this.afs.options.get(\"slider\") || {};\n\n const container = document.createElement(\"div\");\n container.className = \"afs-range-container\";\n\n const slider = document.createElement(\"div\");\n slider.className = sliderOptions.containerClass;\n\n const track = document.createElement(\"div\");\n track.className = sliderOptions.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 = sliderOptions.selectedClass;\n\n const minThumb = document.createElement(\"div\");\n minThumb.className = sliderOptions.thumbClass;\n\n const maxThumb = document.createElement(\"div\");\n maxThumb.className = sliderOptions.thumbClass;\n\n const minValue = document.createElement(\"div\");\n minValue.className = sliderOptions.valueClass;\n\n const maxValue = document.createElement(\"div\");\n maxValue.className = sliderOptions.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.8';\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","ui","showHistogram","bins","track","radius","background","thumb","size","histogram","bar","pagination","button","border","borderRadius","padding","color","active","hover","colors","primary","text","containerClass","trackClass","thumbClass","valueClass","selectedClass","itemsPerPage","container","pageButtonClass","activePageClass","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","createBaseStyles","createRangeStyles","sliderOptions","sliderStyles","createDateStyles","applyStyles","createPaginationStyles","createSearchStyles","textContent","document","createElement","head","appendChild","fallbackStyles","paginationOptions","buttonClass","paginationStyles","searchClass","updateStyles","newOptions","removeStyles","remove","EventEmitter","events","onceEvents","on","eventName","callback","has","add","off","once","_this","onceWrapper","apply","delete","emit","forEach","removeAllListeners","clear","listenerCount","Animation","afs","animations","fade","in","opacity","transform","transitionTimingFunction","out","slide","scale","rotate","flip","zoom","bounce","animation","blur","filter","skew","slideInLeft","slideInRight","fadeInUp","fadeInDown","bounceIn","applyShowAnimation","item","duration","style","display","requestAnimationFrame","Object","assign","transition","applyHideAnimation","handleTransitionEnd","removeEventListener","addEventListener","setAnimation","Filter","filterButtons","activeFilters","currentFilters","filterGroups","sortOrders","setupFilters","logger","filterSelector","querySelectorAll","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","type","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","class","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","createHistogramBars","selectedRange","minThumb","maxThumb","minValue","maxValue","createHistogram","index","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":"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"}
1
+ {"version":3,"file":"AFS.esm.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/InputRangeFilter.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: \".afs-filter-container\",\n itemSelector: \".afs-filter-item\",\n filterButtonSelector: \".afs-btn-filter\",\n searchInputSelector: \".afs-filter-search\",\n counterSelector: \".afs-filter-counter\",\n\n // Classes\n activeClass: \"active\",\n hiddenClass: \"hidden\",\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 // Add new UI options\n ui: {\n showHistogram: false,\n bins: 10, // Number of bins for histogram\n track: {\n radius: \"0\", // Button radius\n background: \"#e5e7eb\", // Track color\n },\n thumb: {\n radius: \"50%\", // Button radius\n size: \"16px\", // Button size\n background: \"#000\", // Button color\n },\n histogram: {\n background: \"#e5e7eb\", // Histogram background\n bar: {\n background: \"#000\", // Bar color\n },\n },\n },\n },\n pagination: {\n ui: {\n button: {\n background: \"transparent\",\n border: \"1px solid #000\",\n borderRadius: \"4px\",\n padding: \"8px 12px\",\n color: \"#000\",\n active: {\n background: \"#000\",\n color: \"#fff\",\n },\n hover: {\n background: \"#000\",\n color: \"#fff\",\n },\n },\n },\n },\n colors: {\n primary: \"#000\",\n background: \"#e5e7eb\",\n text: \"#000\",\n },\n },\n\n // Slider\n slider: {\n containerClass: \"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\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 // Animation\n animation: {\n type: \"fade\",\n duration: 300,\n easing: \"ease-out\",\n inClass: \"afs-animation-enter\",\n outClass: \"afs-animation-leave\",\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 (\n source[key] !== null &&\n typeof source[key] === \"object\" &&\n !Array.isArray(source[key])\n ) {\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 (\n typeof this.options.animation.duration !== \"number\" ||\n this.options.animation.duration < 0\n ) {\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 (\n !Array.isArray(this.options.searchKeys) ||\n this.options.searchKeys.length === 0\n ) {\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","/**\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 }\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\") || \".afs-filter-item\";\n const filterButtonSelector = this.options.get(\"filterButtonSelector\") || \".afs-btn-filter\";\n const activeClass = this.options.get(\"activeClass\") || \"active\";\n const animationDuration = this.options.get(\"animation.duration\") || '300ms';\n const animationEasing = this.options.get(\"animation.easing\") || '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\");\n const sliderOptions = this.options.get(\"slider\") || {};\n const sliderStyles = styles.slider;\n const colors = styles.colors;\n\n const containerClass = sliderOptions.containerClass || \"afs-range-slider\";\n const trackClass = sliderOptions.trackClass || \"afs-range-track\";\n const thumbClass = sliderOptions.thumbClass || \"afs-range-thumb\";\n const valueClass = sliderOptions.valueClass || \"afs-range-value\";\n const selectedClass = sliderOptions.selectedClass || \"afs-range-selected\";\n\n return `\n /* Range Slider Styles */\n .${containerClass} {\n position: relative;\n width: auto;\n height: 40px;\n margin: 10px 0;\n padding: 0 8px;\n }\n\n .${trackClass} {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 100%;\n height: 4px;\n background: ${sliderStyles.ui.track.background || colors.background};\n border-radius: ${sliderStyles.ui.track.radius || \"0\"};\n }\n\n .${thumbClass} {\n position: absolute;\n top: 50%;\n width: ${sliderStyles.ui.thumb.size || \"16px\"};\n height: ${sliderStyles.ui.thumb.size || \"16px\"};\n background: ${sliderStyles.ui.thumb.background || colors.primary};\n border-radius: ${sliderStyles.ui.thumb.radius || \"50%\"};\n transform: translate(-50%, -50%);\n cursor: pointer;\n z-index: 2;\n }\n\n .${valueClass} {\n position: absolute;\n top: -20px;\n transform: translateX(-50%);\n font-size: 10px;\n color: ${colors.text};\n }\n\n .${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: ${sliderStyles.ui.histogram.background ||colors.background};\n min-height: 4px;\n transition: background-color 0.2s ease;\n }\n\n .afs-histogram-bar.active {\n background-color: ${sliderStyles.ui.histogram.bar.background || 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\").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 * Create date filter styles\n * @private\n * @returns {string} CSS styles\n */\n createInputRangeStyles() {\n const colors = this.options.get(\"styles\").colors;\n return `\n .afs-input-range-container {\n display: flex;\n flex-wrap: wrap;\n gap: 1rem;\n margin: 10px 0;\n }\n\n .afs-input-wrapper {\n flex: 1;\n }\n\n .afs-input-label {\n display: block;\n font-size: 0.875rem;\n color: ${colors.text};\n margin-bottom: 0.5rem;\n }\n\n .afs-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-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 /* Input range styles */\n ${this.createInputRangeStyles()}\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 styles = this.options.get(\"styles\");\n const paginationOptions = this.options.get(\"pagination\") || {};\n const colors = this.options.get(\"styles\").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 const paginationStyles = styles.pagination;\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: ${paginationStyles.ui.button.padding || '8px 12px'};\n border: ${paginationStyles.ui.button.border || '1px solid ' + colors.primary};\n border-radius: ${paginationStyles.ui.button.borderRadius || '4px'};\n cursor: pointer;\n transition: all 200ms ease-out;\n background: ${paginationStyles.ui.button.background || 'transparent' };\n color: ${paginationStyles.ui.button.color || colors.primary};\n }\n\n .${buttonClass}:hover {\n background: ${paginationStyles.ui.button.hover.background || colors.primary};\n color: ${paginationStyles.ui.button.hover.color || 'white'};\n }\n\n .${buttonClass}.${activeClass} {\n background: ${paginationStyles.ui.button.active.background || colors.primary};\n color: ${paginationStyles.ui.button.active.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\").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('animation.duration') || '300ms';\n const animation = this.animations[animationType]?.in || this.animations.fade.in;\n \n // Ensure display is set\n item.style.display = 'block';\n item.style.opacity = '0'; // Start with opacity 0\n \n // Apply animation in next frame\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('animation.duration') || '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('animation.type', 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 // Create a promise to track animations\n const animationPromises = [];\n \n // Show all items with animation\n this.afs.items.forEach(item => {\n const promise = new Promise(resolve => {\n item.classList.remove(this.afs.options.get('hiddenClass'));\n item.style.display = 'block'; // Ensure item is visible\n \n requestAnimationFrame(() => {\n this.animation.applyShowAnimation(item, this.afs.options.get(\"animation.type\"));\n // Resolve after animation duration\n setTimeout(resolve, this.afs.options.get(\"animation.duration\") || 300);\n });\n });\n animationPromises.push(promise);\n });\n \n // Update state after all items are visible\n const visibleItems = new Set(this.afs.items);\n this.afs.state.setState(\"items.visible\", visibleItems);\n \n // Wait for all animations to complete\n Promise.all(animationPromises).then(() => {\n // Update counter\n this.afs.updateCounter();\n \n // Update URL\n this.afs.urlManager.updateURL();\n \n // Emit event\n this.afs.emit(\"filtersReset\");\n });\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 const activeFilters = Array.from(this.activeFilters);\n this.afs.logger.debug(\"Active filters:\", activeFilters);\n\n const previouslyVisible = new Set(this.afs.state.getState().items.visible);\n const visibleItems = new Set();\n\n // First determine visibility\n this.afs.items.forEach(item => {\n if (this.activeFilters.has(\"*\") || this.itemMatchesFilters(item)) {\n visibleItems.add(item);\n }\n });\n\n // Update state before animations\n this.afs.state.setState(\"items.visible\", visibleItems);\n\n // Track animation promises\n const animationPromises = [];\n\n // Apply animations\n this.afs.items.forEach(item => {\n const promise = new Promise(resolve => {\n if (visibleItems.has(item)) {\n // Show item\n item.classList.remove(this.afs.options.get('hiddenClass'));\n requestAnimationFrame(() => {\n this.animation.applyShowAnimation(item, this.afs.options.get(\"animation.type\"));\n setTimeout(resolve, parseFloat(this.afs.options.get(\"animation.duration\")) || 300);\n });\n } else {\n // Hide item\n requestAnimationFrame(() => {\n this.animation.applyHideAnimation(item, this.afs.options.get(\"animation.type\"));\n setTimeout(resolve, parseFloat(this.afs.options.get(\"animation.duration\")) || 300);\n });\n }\n });\n animationPromises.push(promise);\n });\n\n // Handle completion\n Promise.all(animationPromises).then(() => {\n // Ensure visible items remain visible\n visibleItems.forEach(item => {\n item.style.display = 'block';\n item.style.opacity = '1';\n });\n\n // Update UI\n this.afs.updateCounter();\n this.afs.urlManager.updateURL();\n\n this.afs.emit(\"filtersApplied\", {\n activeFilters,\n visibleItems: visibleItems.size,\n });\n });\n\n // Emit visibility change events\n this.emitFilterEvents(previouslyVisible, visibleItems);\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 Input range filter implementation for AFS\n */\n\nimport { debounce } from '../utils';\n\nexport class InputRangeFilter {\n constructor(afs) {\n this.afs = afs;\n this.activeRanges = new Map();\n }\n\n /**\n * @typedef {Object} InputRangeOptions\n * @property {string} key - Data attribute key\n * @property {HTMLElement} container - Container element\n * @property {number} [min] - Minimum value\n * @property {number} [max] - Maximum value\n * @property {number} [step] - Step value\n * @property {string} [label] - Label for the input range\n */\n\n /**\n * Add input range filter\n * @param {InputRangeOptions} options - Input range options\n */\n addInputRange({ key, container, min, max, step = 1, label = '' }) {\n this.afs.logger.debug(`Adding input range for ${key}`);\n\n if (!container) {\n this.afs.logger.error('Container element required for input range');\n return;\n }\n\n // Calculate min/max if not provided\n const values = this.calculateMinMax(key);\n min = min ?? values.min;\n max = max ?? values.max;\n\n // Create input elements\n const elements = this.createInputElements(label);\n const state = this.initializeState(min, max, step);\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.updateInputUI(key);\n\n this.afs.logger.info(`Input range added for ${key}`);\n }\n\n /**\n * Calculate min and max values from items\n * @private\n */\n calculateMinMax(key) {\n try {\n const values = Array.from(this.afs.items)\n .map(item => {\n if (!item || !item.dataset || !item.dataset[key]) {\n return null;\n }\n const value = parseFloat(item.dataset[key]);\n return isNaN(value) ? null : value;\n })\n .filter(value => value !== null);\n\n if (values.length === 0) {\n return {\n min: 0,\n max: 100\n };\n }\n\n return {\n min: Math.min(...values),\n max: Math.max(...values)\n };\n } catch (error) {\n this.afs.logger.error('Error calculating range:', error);\n return {\n min: 0,\n max: 100\n };\n }\n }\n\n /**\n * Create input elements\n * @private\n */\n /**\n * Create input elements\n * @private\n */\ncreateInputElements(label) {\n const container = document.createElement('div');\n container.className = 'afs-input-range-container';\n\n if (label) {\n const labelElement = document.createElement('div');\n labelElement.className = 'afs-input-range-label';\n labelElement.textContent = label;\n container.appendChild(labelElement);\n }\n\n // Min input wrapper\n const minWrapper = document.createElement('div');\n minWrapper.className = 'afs-input-wrapper';\n \n const minLabel = document.createElement('label');\n minLabel.textContent = 'Min';\n minLabel.className = 'afs-input-label';\n \n const minInput = document.createElement('input');\n minInput.type = 'number';\n minInput.className = 'afs-input min';\n\n minWrapper.appendChild(minLabel);\n minWrapper.appendChild(minInput);\n\n // Max input wrapper\n const maxWrapper = document.createElement('div');\n maxWrapper.className = 'afs-input-wrapper';\n \n const maxLabel = document.createElement('label');\n maxLabel.textContent = 'Max';\n maxLabel.className = 'afs-input-label';\n \n const maxInput = document.createElement('input');\n maxInput.type = 'number';\n maxInput.className = 'afs-input max';\n\n maxWrapper.appendChild(maxLabel);\n maxWrapper.appendChild(maxInput);\n\n container.appendChild(minWrapper);\n container.appendChild(maxWrapper);\n\n return {\n container,\n minInput,\n maxInput\n };\n}\n\n /**\n * Initialize input range state\n * @private\n */\n initializeState(min, max, step) {\n return {\n min,\n max,\n step,\n currentMin: min,\n currentMax: max\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 const { minInput, maxInput } = elements;\n\n const handleInputChange = debounce(() => {\n const minValue = parseFloat(minInput.value);\n const maxValue = parseFloat(maxInput.value);\n\n if (!isNaN(minValue) && !isNaN(maxValue)) {\n state.currentMin = Math.max(state.min, Math.min(maxValue, minValue));\n state.currentMax = Math.min(state.max, Math.max(minValue, maxValue));\n this.updateInputUI(key);\n this.applyFilter(key);\n }\n }, 300);\n\n minInput.addEventListener('input', handleInputChange);\n maxInput.addEventListener('input', handleInputChange);\n }\n\n /**\n * Update input UI\n * @private\n */\n updateInputUI(key) {\n try {\n const { state, elements } = this.activeRanges.get(key);\n const { minInput, maxInput } = elements;\n\n // Set constraints\n minInput.min = state.min;\n minInput.max = state.max;\n minInput.step = state.step;\n maxInput.min = state.min;\n maxInput.max = state.max;\n maxInput.step = state.step;\n\n // Set current values\n minInput.value = state.currentMin;\n maxInput.value = state.currentMax;\n } catch (error) {\n this.afs.logger.error('Error updating input UI:', error);\n }\n }\n\n /**\n * Apply filter\n * @private\n */\n applyFilter(key) {\n this.afs.logger.info(`Applying input filter for ${key}`);\n const { state } = this.activeRanges.get(key);\n\n this.afs.items.forEach(item => {\n try {\n if (!item || !item.dataset || !item.dataset[key]) {\n this.afs.hideItem(item);\n return;\n }\n\n const itemValue = parseFloat(item.dataset[key]);\n if (isNaN(itemValue)) {\n this.afs.hideItem(item);\n return;\n }\n\n if (itemValue >= state.currentMin && itemValue <= state.currentMax) {\n this.afs.showItem(item);\n } else {\n this.afs.hideItem(item);\n }\n } catch (error) {\n this.afs.logger.error('Error filtering item:', error);\n this.afs.hideItem(item);\n }\n });\n\n this.afs.updateCounter();\n this.afs.urlManager.updateURL();\n this.afs.emit('inputRangeFilter', {\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 getRange(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 };\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 setRange(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.updateInputUI(key);\n this.applyFilter(key);\n }\n\n /**\n * Remove input range\n * @param {string} key - Range key\n */\n removeInputRange(key) {\n const range = this.activeRanges.get(key);\n if (!range) return;\n\n range.elements.container.remove();\n this.activeRanges.delete(key);\n this.afs.logger.info(`Input range removed for ${key}`);\n }\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\n if (!this.afs.options.get('pagination.enabled')) {\n return;\n }\n\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 this.options = this.afs.options.get(\"slider\");\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 colors = styles.colors || this.afs.styleManager.defaultStyles.colors;\n const sliderOptions = this.afs.options.get(\"slider\") || {};\n\n const container = document.createElement(\"div\");\n container.className = \"afs-range-container\";\n\n const slider = document.createElement(\"div\");\n slider.className = sliderOptions.containerClass;\n\n const track = document.createElement(\"div\");\n track.className = sliderOptions.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 = sliderOptions.selectedClass;\n\n const minThumb = document.createElement(\"div\");\n minThumb.className = sliderOptions.thumbClass;\n\n const maxThumb = document.createElement(\"div\");\n maxThumb.className = sliderOptions.thumbClass;\n\n const minValue = document.createElement(\"div\");\n minValue.className = sliderOptions.valueClass;\n\n const maxValue = document.createElement(\"div\");\n maxValue.className = sliderOptions.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 { InputRangeFilter } from \"./features/InputRangeFilter\";\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.9';\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 this.inputRangeFilter = new InputRangeFilter(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","filterMode","searchKeys","debounceTime","dateFormat","counter","template","showFiltered","filteredTemplate","noResultsTemplate","formatter","num","toLocaleString","styles","slider","ui","showHistogram","bins","track","radius","background","thumb","size","histogram","bar","pagination","button","border","borderRadius","padding","color","active","hover","colors","primary","text","containerClass","trackClass","thumbClass","valueClass","selectedClass","itemsPerPage","container","pageButtonClass","activePageClass","scrollToTop","scrollOffset","scrollBehavior","animation","type","duration","easing","inClass","outClass","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","createBaseStyles","animationDuration","animationEasing","createRangeStyles","sliderOptions","sliderStyles","createDateStyles","createInputRangeStyles","applyStyles","createPaginationStyles","createSearchStyles","textContent","document","createElement","head","appendChild","fallbackStyles","paginationOptions","buttonClass","paginationStyles","searchClass","updateStyles","newOptions","removeStyles","remove","EventEmitter","events","onceEvents","on","eventName","callback","has","add","off","once","_this","onceWrapper","apply","delete","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","animationType","style","display","requestAnimationFrame","Object","assign","transition","applyHideAnimation","handleTransitionEnd","removeEventListener","addEventListener","setAnimation","Filter","filterButtons","activeFilters","currentFilters","filterGroups","sortOrders","setupFilters","logger","filterSelector","querySelectorAll","filterValue","dataset","bindFilterEvent","setLogic","logic","applyFilters","clearAllFilters","_","classList","allButton","findAllButton","urlManager","updateURL","resetFilters","toggleFilter","animationPromises","promise","Promise","resolve","setTimeout","push","visibleItems","all","then","updateCounter","handleFilterClick","contains","previouslyVisible","itemMatchesFilters","parseFloat","emitFilterEvents","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","getTime","toLowerCase","comparison","fragment","createDocumentFragment","getCurrentSortOrder","clearSortOrders","checkboxes","checkbox","checked","setValue","refresh","removeFilterButton","destroy","debounce","func","wait","immediate","timeout","executedFunction","context","later","callNow","clearTimeout","InputRangeFilter","activeRanges","addInputRange","_ref","min","max","step","label","calculateMinMax","elements","createInputElements","initializeState","appendElements","setupEventHandlers","updateInputUI","className","labelElement","minWrapper","minLabel","minInput","maxWrapper","maxLabel","maxInput","currentMin","currentMax","handleInputChange","minValue","maxValue","applyFilter","hideItem","itemValue","showItem","getRange","range","setRange","removeInputRange","Search","searchInput","minSearchLength","highlightClass","setupSearch","searchSelector","querySelector","bindSearchEvents","debouncedSearch","e","clearSearch","preventDefault","normalizedQuery","normalizeQuery","regex","createSearchRegex","searchText","getItemSearchText","matchesSearch","highlightMatches","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","itemsContainer","bindEvents","closest","page","goToPage","parseInt","ceil","currentState","updateVisibility","renderPagination","startIndex","endIndex","itemsToShow","slice","controls","createPaginationControls","showPrevNext","prevButton","createPageButton","disabled","class","calculatePageRange","start","createEllipsis","end","toString","nextButton","span","maxButtons","sideButtons","targetPage","offsetHeight","previousPage","window","scrollTo","top","offsetTop","behavior","setPaginationMode","showAllItems","URLManager","defaultParams","URLSearchParams","setupPopStateHandler","loadFromURL","params","addFiltersToURL","addRangesToURL","addSearchToURL","addSortToURL","addPaginationToURL","pushState","filtersByType","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","styleManager","addRangeSlider","globalUiOptions","sliderUiOptions","histogramData","calculateHistogramData","counts","binEdges","createSliderElements","updateSliderUI","setupHistogramHighlight","createHistogramBars","selectedRange","minThumb","maxThumb","createHistogram","index","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","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","inputRangeFilter","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":"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"}