nimuli/resources/js/bootstrap.js

58 lines
1.7 KiB
JavaScript

import axios from 'axios';
window.axios = axios;
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
import Echo from 'laravel-echo';
import Pusher from 'pusher-js';
window.Pusher = Pusher;
window.Echo = new Echo({
broadcaster: 'reverb',
key: import.meta.env.VITE_REVERB_APP_KEY,
wsHost: import.meta.env.VITE_REVERB_HOST,
wsPort: 443,
wssPort: 443,
forceTLS: true,
enabledTransports: ['ws', 'wss'],
});
import {
Chart,
LineController, LineElement,
BarController, BarElement,
DoughnutController, ArcElement,
PointElement, LinearScale, CategoryScale,
Tooltip, Legend, Filler,
TimeScale,
} from 'chart.js';
Chart.register(
LineController, LineElement,
BarController, BarElement,
DoughnutController, ArcElement,
PointElement, LinearScale, CategoryScale,
Tooltip, Legend, Filler, TimeScale
);
window.Chart = Chart;
// Alpine stores registered via alpine:init — Livewire v3 owns Alpine lifecycle
document.addEventListener('alpine:init', () => {
Alpine.store('theme', {
current: localStorage.getItem('nimuli_theme') || document.documentElement.dataset.theme || 'dark',
init() { this.apply(this.current); },
apply(theme) {
this.current = theme;
document.documentElement.dataset.theme = theme;
localStorage.setItem('nimuli_theme', theme);
document.cookie = 'nimuli_theme=' + theme + '; path=/; max-age=31536000; SameSite=Lax';
},
cycle() {
const order = ['dark', 'light', 'system'];
this.apply(order[(order.indexOf(this.current) + 1) % order.length]);
},
});
Alpine.store('sidebar', { open: false });
});