63 lines
1.7 KiB
JavaScript
63 lines
1.7 KiB
JavaScript
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();
|