// If you want to use Phoenix channels, run `mix help phx.gen.channel` // to get started and then uncomment the line below. // import "./user_socket.js" // You can include dependencies in two ways. // // The simplest option is to put them in assets/vendor and // import them using relative paths: // // import "../vendor/some-package.js" // // Alternatively, you can `npm install some-package --prefix assets` and import // them using a path starting with the package name: // // import "some-package" // // Include phoenix_html to handle method=PUT/DELETE in forms and buttons. import "phoenix_html"; // Establish Phoenix Socket and LiveView configuration. import { Socket } from "phoenix"; import { LiveSocket, ViewHook } from "phoenix_live_view"; import topbar from "topbar"; import Alpine, { XAttributes } from "alpinejs"; const Hooks: { [name: string]: Partial } = { HomeHeader: { mounted() { console.log("HomeHeader mounted on element: ", this.el); }, }, }; let csrfToken = document .querySelector("meta[name='csrf-token']") ?.getAttribute("content"); let liveSocket = new LiveSocket("/live", Socket, { hooks: Hooks, params: { _csrf_token: csrfToken }, dom: { onBeforeElUpdated(from, to) { const stack = (from as HTMLElement & XAttributes)._x_dataStack; if (stack) { Alpine.clone(from, to); } return false; }, }, }); // Show progress bar on live navigation and form submits topbar.config({ barColors: { 0: "#29d" }, shadowColor: "rgba(0, 0, 0, .3)" }); window.addEventListener("phx:page-loading-start", (_info) => topbar.show(300)); window.addEventListener("phx:page-loading-stop", (_info) => topbar.hide()); // connect if there are any LiveViews on the page liveSocket.connect(); // expose liveSocket on window for web console debug logs and latency simulation: // >> liveSocket.enableDebug() // >> liveSocket.enableLatencySim(1000) // enabled for duration of browser session // >> liveSocket.disableLatencySim() window.liveSocket = liveSocket; window.Alpine = Alpine; Alpine.start(); // Add handler for custom event window.addEventListener(`phx:demo-event`, async (e) => { console.log(`Hello ${e.detail.name}`); });