import Alpine from 'alpinejs'; import axios from 'axios'; window.Alpine = Alpine; Alpine.store('app', { sidebarOpen: window.innerWidth >= 768, darkMode: localStorage.getItem('darkMode') === 'true', mobileMenuOpen: false, toggleSidebar() { this.sidebarOpen = !this.sidebarOpen; }, toggleDarkMode() { this.darkMode = !this.darkMode; localStorage.setItem('darkMode', this.darkMode); document.documentElement.classList.toggle('dark', this.darkMode); }, toggleMobileMenu() { this.mobileMenuOpen = !this.mobileMenuOpen; }, }); Alpine.data('dropdown', () => ({ open: false, toggle() { this.open = !this.open; }, close() { this.open = false; }, })); Alpine.data('confirmDialog', () => ({ showing: false, message: '', onConfirm: null, show(message, onConfirm) { this.message = message; this.onConfirm = onConfirm; this.showing = true; }, confirm() { if (this.onConfirm) this.onConfirm(); this.showing = false; }, cancel() { this.showing = false; }, })); Alpine.data('toast', () => ({ toasts: [], add(message, type = 'success', duration = 3000) { const id = Date.now(); this.toasts.push({ id, message, type }); setTimeout(() => { this.toasts = this.toasts.filter(t => t.id !== id); }, duration); }, })); axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; axios.defaults.headers.common['Accept'] = 'application/json'; axios.defaults.headers.common['X-Locale'] = document.documentElement.lang || 'fa'; const token = document.querySelector('meta[name="csrf-token"]'); if (token) axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content; Alpine.start();