{
  "version": 3,
  "sources": ["../src/favorites.js"],
  "sourcesContent": ["/**\n * Favorites Manager\n * Used in: templates/base.html, templates/core/includes/object_card.html\n *\n * Manages favorites for both anonymous (localStorage) and authenticated (API) users.\n * Provides optimistic UI updates with rollback on error.\n */\n(function() {\n    'use strict';\n\n    var STORAGE_KEY = 'aliis_favorites';\n    var MAX_ANONYMOUS_FAVORITES = 100;\n    var API_BASE = '/api/favorites/';\n\n    // State\n    var state = {\n        favorites: {},  // { objectId: true }\n        isAuthenticated: false,\n        isSyncing: false,\n        count: 0,\n        initialized: false\n    };\n\n    // === LocalStorage Operations ===\n\n    function getLocalFavorites() {\n        try {\n            var stored = localStorage.getItem(STORAGE_KEY);\n            if (stored) {\n                var parsed = JSON.parse(stored);\n                return Array.isArray(parsed) ? parsed : [];\n            }\n        } catch (e) {\n            console.warn('Favorites: localStorage read error', e);\n        }\n        return [];\n    }\n\n    function setLocalFavorites(ids) {\n        try {\n            localStorage.setItem(STORAGE_KEY, JSON.stringify(ids));\n        } catch (e) {\n            console.warn('Favorites: localStorage write error', e);\n        }\n    }\n\n    function addLocalFavorite(objectId) {\n        var favorites = getLocalFavorites();\n        if (favorites.indexOf(objectId) === -1) {\n            if (favorites.length >= MAX_ANONYMOUS_FAVORITES) {\n                favorites.shift();  // Remove oldest\n            }\n            favorites.push(objectId);\n            setLocalFavorites(favorites);\n        }\n        return favorites;\n    }\n\n    function removeLocalFavorite(objectId) {\n        var favorites = getLocalFavorites();\n        var index = favorites.indexOf(objectId);\n        if (index !== -1) {\n            favorites.splice(index, 1);\n            setLocalFavorites(favorites);\n        }\n        return favorites;\n    }\n\n    // === API Operations ===\n\n    function getCSRFToken() {\n        var cookie = document.cookie.match(/csrftoken=([^;]+)/);\n        return cookie ? cookie[1] : '';\n    }\n\n    function apiRequest(method, url, data) {\n        var options = {\n            method: method,\n            headers: {\n                'Content-Type': 'application/json',\n                'X-CSRFToken': getCSRFToken()\n            },\n            credentials: 'same-origin'\n        };\n\n        if (data) {\n            options.body = JSON.stringify(data);\n        }\n\n        return fetch(API_BASE + url, options)\n            .then(function(response) {\n                if (!response.ok) {\n                    throw new Error('API error: ' + response.status);\n                }\n                return response.json();\n            });\n    }\n\n    function apiToggleFavorite(objectId) {\n        return apiRequest('POST', 'toggle/' + objectId + '/');\n    }\n\n    function apiFetchFavorites() {\n        return apiRequest('GET', '');\n    }\n\n    function apiCheckFavorites(objectIds) {\n        if (!objectIds.length) {\n            return Promise.resolve({ favorites: [] });\n        }\n        return apiRequest('GET', 'check/?ids=' + objectIds.join(','));\n    }\n\n    function apiSyncFavorites(localIds) {\n        return apiRequest('POST', 'sync/', { object_ids: localIds });\n    }\n\n    function apiGetCount() {\n        return apiRequest('GET', 'count/');\n    }\n\n    // === UI Updates ===\n\n    function updateAllButtons() {\n        var buttons = document.querySelectorAll('[data-favorite-btn]');\n        buttons.forEach(function(btn) {\n            var objectId = parseInt(btn.getAttribute('data-favorite-btn'), 10);\n            if (objectId) {\n                updateButton(objectId, !!state.favorites[objectId]);\n            }\n        });\n    }\n\n    function updateButton(objectId, isFavorite) {\n        var buttons = document.querySelectorAll('[data-favorite-btn=\"' + objectId + '\"]');\n        buttons.forEach(function(btn) {\n            // \u041F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u0435\u043C \u043A\u043D\u043E\u043F\u043A\u0438, \u0443\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u043C\u044B\u0435 Alpine.js (\u0443 \u043D\u0438\u0445 \u0435\u0441\u0442\u044C x-data \u043D\u0430 \u0441\u0430\u043C\u043E\u0439 \u043A\u043D\u043E\u043F\u043A\u0435)\n            // \u042D\u0442\u0438 \u043A\u043D\u043E\u043F\u043A\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u044E\u0442\u0441\u044F \u0447\u0435\u0440\u0435\u0437 \u0441\u043E\u0431\u044B\u0442\u0438\u0435 'favorites-updated' \u0438 :class\n            var hasAlpine = btn.hasAttribute('x-data');\n            if (hasAlpine) {\n                return;\n            }\n\n            // \u041E\u0431\u043D\u043E\u0432\u043B\u044F\u0435\u043C \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0431\u044B\u0447\u043D\u044B\u0435 \u043A\u043D\u043E\u043F\u043A\u0438 (\u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432, \u043A\u0430\u0442\u0430\u043B\u043E\u0433)\n            var svg = btn.querySelector('svg');\n            if (svg) {\n                if (isFavorite) {\n                    svg.setAttribute('fill', 'currentColor');\n                    btn.classList.add('text-red-500');\n                    btn.classList.remove('text-gray-400', 'dark:text-neutral-500');\n                } else {\n                    svg.setAttribute('fill', 'none');\n                    btn.classList.remove('text-red-500');\n                    btn.classList.add('text-gray-400', 'dark:text-neutral-500');\n                }\n            }\n        });\n    }\n\n    function updateCounter() {\n        var counters = document.querySelectorAll('[data-favorites-counter]');\n        counters.forEach(function(counter) {\n            if (state.count > 0) {\n                counter.textContent = state.count > 99 ? '99+' : state.count;\n                counter.classList.remove('hidden');\n                counter.classList.add('inline-flex');\n            } else {\n                counter.textContent = '';\n                counter.classList.add('hidden');\n                counter.classList.remove('inline-flex');\n            }\n        });\n    }\n\n    function dispatchUpdate() {\n        // Dispatch custom event for Alpine.js components\n        window.dispatchEvent(new CustomEvent('favorites-updated', {\n            detail: { count: state.count, favorites: Object.keys(state.favorites) }\n        }));\n    }\n\n    function showToast(type, message) {\n        if (window.Toast && typeof window.Toast.show === 'function') {\n            window.Toast.show(type, message);\n        }\n    }\n\n    // === Core Logic ===\n\n    function toggle(objectId) {\n        objectId = parseInt(objectId, 10);\n        if (!objectId || isNaN(objectId)) return;\n\n        var wasFavorite = !!state.favorites[objectId];\n\n        // Optimistic UI update\n        if (wasFavorite) {\n            delete state.favorites[objectId];\n            state.count = Math.max(0, state.count - 1);\n        } else {\n            state.favorites[objectId] = true;\n            state.count++;\n        }\n        updateButton(objectId, !wasFavorite);\n        updateCounter();\n        dispatchUpdate();\n\n        if (state.isAuthenticated) {\n            // API call for authenticated users\n            apiToggleFavorite(objectId)\n                .then(function(result) {\n                    // Sync state with server response\n                    if (result.is_favorite) {\n                        state.favorites[objectId] = true;\n                    } else {\n                        delete state.favorites[objectId];\n                    }\n                    state.count = result.count;\n                    updateButton(objectId, result.is_favorite);\n                    updateCounter();\n                    dispatchUpdate();\n                    showToast('success', result.message);\n                })\n                .catch(function(error) {\n                    console.error('Favorites: toggle error', error);\n                    // Rollback on error\n                    if (wasFavorite) {\n                        state.favorites[objectId] = true;\n                        state.count++;\n                    } else {\n                        delete state.favorites[objectId];\n                        state.count = Math.max(0, state.count - 1);\n                    }\n                    updateButton(objectId, wasFavorite);\n                    updateCounter();\n                    dispatchUpdate();\n                    showToast('error', '\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0438\u0437\u0431\u0440\u0430\u043D\u043D\u043E\u0435');\n                });\n        } else {\n            // LocalStorage for anonymous users\n            if (wasFavorite) {\n                removeLocalFavorite(objectId);\n                showToast('success', '\u0423\u0434\u0430\u043B\u0435\u043D\u043E \u0438\u0437 \u0438\u0437\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E');\n            } else {\n                addLocalFavorite(objectId);\n                showToast('success', '\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E \u0432 \u0438\u0437\u0431\u0440\u0430\u043D\u043D\u043E\u0435');\n            }\n        }\n    }\n\n    function isFavorite(objectId) {\n        objectId = parseInt(objectId, 10);\n        return !!state.favorites[objectId];\n    }\n\n    function getCount() {\n        return state.count;\n    }\n\n    function getAll() {\n        return Object.keys(state.favorites).map(function(id) {\n            return parseInt(id, 10);\n        });\n    }\n\n    function syncOnLogin() {\n        var localIds = getLocalFavorites();\n        if (localIds.length === 0 || !state.isAuthenticated || state.isSyncing) {\n            return;\n        }\n\n        state.isSyncing = true;\n        apiSyncFavorites(localIds)\n            .then(function(result) {\n                // Clear localStorage after successful sync\n                setLocalFavorites([]);\n                state.count = result.total;\n                state.isSyncing = false;\n\n                // Reload favorites from server to get full list\n                return apiFetchFavorites();\n            })\n            .then(function(data) {\n                state.favorites = {};\n                data.items.forEach(function(item) {\n                    state.favorites[item.id] = true;\n                });\n                state.count = data.count;\n                updateAllButtons();\n                updateCounter();\n            })\n            .catch(function(error) {\n                console.error('Favorites: sync error', error);\n                state.isSyncing = false;\n            });\n    }\n\n    function loadFromServer() {\n        apiFetchFavorites()\n            .then(function(data) {\n                state.favorites = {};\n                data.items.forEach(function(item) {\n                    state.favorites[item.id] = true;\n                });\n                state.count = data.count;\n                state.initialized = true;\n                updateAllButtons();\n                updateCounter();\n                dispatchUpdate();\n\n                // Check for localStorage data to sync\n                syncOnLogin();\n            })\n            .catch(function(error) {\n                console.error('Favorites: load error', error);\n                state.initialized = true;\n                dispatchUpdate();\n            });\n    }\n\n    function loadFromLocalStorage() {\n        var favorites = getLocalFavorites();\n        state.favorites = {};\n        favorites.forEach(function(id) {\n            state.favorites[id] = true;\n        });\n        state.count = favorites.length;\n        state.initialized = true;\n        updateAllButtons();\n        updateCounter();\n        dispatchUpdate();\n    }\n\n    function handleFavoriteClick(event) {\n        var btn = event.target.closest('[data-favorite-btn]');\n        if (btn) {\n            event.preventDefault();\n            event.stopPropagation();\n            var objectId = btn.getAttribute('data-favorite-btn');\n            toggle(objectId);\n        }\n    }\n\n    function init() {\n        // Read auth state from window config\n        var config = window.FAVORITES_CONFIG || {};\n        state.isAuthenticated = !!config.isAuthenticated;\n\n        if (state.isAuthenticated) {\n            // Load from API\n            loadFromServer();\n        } else {\n            // Load from localStorage\n            loadFromLocalStorage();\n        }\n\n        // Listen for button clicks (event delegation)\n        document.body.addEventListener('click', handleFavoriteClick);\n\n        // Re-init after HTMX swaps\n        document.body.addEventListener('htmx:afterSwap', function() {\n            updateAllButtons();\n        });\n\n        // Re-init after Alpine.js updates\n        document.body.addEventListener('alpine:initialized', function() {\n            updateAllButtons();\n        });\n    }\n\n    // Public API\n    window.Favorites = {\n        toggle: toggle,\n        isFavorite: isFavorite,\n        getCount: getCount,\n        getAll: getAll,\n        refresh: function() {\n            if (state.isAuthenticated) {\n                loadFromServer();\n            } else {\n                loadFromLocalStorage();\n            }\n        }\n    };\n\n    // Initialize on DOM ready\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', init);\n    } else {\n        init();\n    }\n})();\n"],
  "mappings": "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",
  "names": ["STORAGE_KEY", "MAX_ANONYMOUS_FAVORITES", "API_BASE", "state", "getLocalFavorites", "stored", "parsed", "e", "setLocalFavorites", "ids", "addLocalFavorite", "objectId", "favorites", "removeLocalFavorite", "index", "getCSRFToken", "cookie", "apiRequest", "method", "url", "data", "options", "response", "apiToggleFavorite", "apiFetchFavorites", "apiCheckFavorites", "objectIds", "apiSyncFavorites", "localIds", "apiGetCount", "updateAllButtons", "buttons", "btn", "updateButton", "isFavorite", "hasAlpine", "svg", "updateCounter", "counters", "counter", "dispatchUpdate", "showToast", "type", "message", "toggle", "wasFavorite", "result", "error", "getCount", "getAll", "id", "syncOnLogin", "item", "loadFromServer", "loadFromLocalStorage", "handleFavoriteClick", "event", "init", "config"]
}
